using System;
public class Test
{
class Node
{
public Node Left { get; protected set; }
public Node Right { get; protected set; }
public Node Parent { get; protected set; }
public Node Next { get; set; }
public int Value { get; set; }
public Node(int val)
{
Value = val;
}
public Node(int val, Node l, Node r) : this(val)
{
SetNodes(l, r);
}
public void SetNodes(Node l, Node r)
{
if (l != null) l.Parent = this;
if (r != null) r.Parent = this;
Left = l;
Right = r;
}
public void SetAsParent(Node p)
{
if (p.Left == null)
p.Left = this;
else if (p.Right == null)
p.Right = this;
else
throw new Exception("Busy");
}
}
static void Main(string[] args)
{
Node leaf1 = new Node(1);
Node leaf2 = new Node(2);
Node leaf3 = new Node(3);
Node mid1 = new Node(4, leaf1, null);
Node mid2 = new Node(5, leaf2, leaf3);
Node root = new Node(6, mid1, mid2);
root.Next = root.Left;
Link(root);
for (var r = root; r != null; r = r.Next)
{
Console.Write(r.Value + " ");
}
Console.Write("\r\n");
}
static void Link(Node n)
{
if (n == null)
return;
if (n.Left != null)
n.Left.Next = n.Right;
if (n.Right != null)
n.Right.Next = n.Next.Left;
Link(n.Left);
Link(n.Right);
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJY2xhc3MgTm9kZQogICAgICAgIHsKICAgICAgICAgICAgcHVibGljIE5vZGUgTGVmdCB7IGdldDsgcHJvdGVjdGVkIHNldDsgfQogICAgICAgICAgICBwdWJsaWMgTm9kZSBSaWdodCB7IGdldDsgcHJvdGVjdGVkIHNldDsgfQogICAgICAgICAgICBwdWJsaWMgTm9kZSBQYXJlbnQgeyBnZXQ7IHByb3RlY3RlZCBzZXQ7IH0KICAgICAgICAgICAgcHVibGljIE5vZGUgTmV4dCB7IGdldDsgc2V0OyB9CgogICAgICAgICAgICBwdWJsaWMgaW50IFZhbHVlIHsgZ2V0OyBzZXQ7IH0KCiAgICAgICAgICAgIHB1YmxpYyBOb2RlKGludCB2YWwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlID0gdmFsOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdWJsaWMgTm9kZShpbnQgdmFsLCBOb2RlIGwsIE5vZGUgcikgOiB0aGlzKHZhbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU2V0Tm9kZXMobCwgcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1YmxpYyB2b2lkIFNldE5vZGVzKE5vZGUgbCwgTm9kZSByKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAobCAhPSBudWxsKSBsLlBhcmVudCA9IHRoaXM7CiAgICAgICAgICAgICAgICBpZiAociAhPSBudWxsKSByLlBhcmVudCA9IHRoaXM7CgogICAgICAgICAgICAgICAgTGVmdCA9IGw7CiAgICAgICAgICAgICAgICBSaWdodCA9IHI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1YmxpYyB2b2lkIFNldEFzUGFyZW50KE5vZGUgcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHAuTGVmdCA9PSBudWxsKQogICAgICAgICAgICAgICAgICAgIHAuTGVmdCA9IHRoaXM7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChwLlJpZ2h0ID09IG51bGwpCiAgICAgICAgICAgICAgICAgICAgcC5SaWdodCA9IHRoaXM7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQnVzeSIpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICAgICAgewogICAgICAgIAlOb2RlIGxlYWYxID0gbmV3IE5vZGUoMSk7CiAgICAgICAgCU5vZGUgbGVhZjIgPSBuZXcgTm9kZSgyKTsKICAgICAgICAJTm9kZSBsZWFmMyA9IG5ldyBOb2RlKDMpOwogICAgICAgIAlOb2RlIG1pZDEgPSBuZXcgTm9kZSg0LCBsZWFmMSwgbnVsbCk7CiAgICAgICAgCU5vZGUgbWlkMiA9IG5ldyBOb2RlKDUsIGxlYWYyLCBsZWFmMyk7CiAgICAgICAgCU5vZGUgcm9vdCA9IG5ldyBOb2RlKDYsIG1pZDEsIG1pZDIpOwogICAgICAgIAkKICAgICAgICAgICAgcm9vdC5OZXh0ID0gcm9vdC5MZWZ0OwogICAgICAgICAgICBMaW5rKHJvb3QpOwoKICAgICAgICAgICAgZm9yICh2YXIgciA9IHJvb3Q7IHIgIT0gbnVsbDsgciA9IHIuTmV4dCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZShyLlZhbHVlICsgIiAgIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQ29uc29sZS5Xcml0ZSgiXHJcbiIpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIHZvaWQgTGluayhOb2RlIG4pCiAgICAgICAgewogICAgICAgICAgICBpZiAobiA9PSBudWxsKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgaWYgKG4uTGVmdCAhPSBudWxsKQogICAgICAgICAgICAgICAgbi5MZWZ0Lk5leHQgPSBuLlJpZ2h0OwoKICAgICAgICAgICAgaWYgKG4uUmlnaHQgIT0gbnVsbCkKICAgICAgICAgICAgICAgIG4uUmlnaHQuTmV4dCA9IG4uTmV4dC5MZWZ0OwoKICAgICAgICAgICAgTGluayhuLkxlZnQpOwogICAgICAgICAgICBMaW5rKG4uUmlnaHQpOwogICAgICAgIH0KfQ==