using
System;
class
Node
{
public
int
key;
public
Node left, right, parent;
public
Node(
int
key)
{
this
.key = key;
left = right = parent =
null
;
}
}
class
BinaryTree
{
Node root;
Node insert(Node node,
int
key)
{
if
(node ==
null
)
return
new
Node(key);
if
(key < node.key)
{
node.left = insert(node.left, key);
node.left.parent = node;
}
else
if
(key > node.key)
{
node.right = insert(node.right, key);
node.right.parent = node;
}
return
node;
}
void
inorder(Node root)
{
Boolean leftdone =
false
;
while
(root !=
null
)
{
if
(!leftdone)
{
while
(root.left !=
null
)
{
root = root.left;
}
}
Console.Write(root.key +
" "
);
leftdone =
true
;
if
(root.right !=
null
)
{
leftdone =
false
;
root = root.right;
}
else
if
(root.parent !=
null
)
{
while
(root.parent !=
null
&&
root == root.parent.right)
root = root.parent;
if
(root.parent ==
null
)
break
;
root = root.parent;
}
else
break
;
}
}
static
public
void
Main(String[] args)
{
BinaryTree tree =
new
BinaryTree();
tree.root = tree.insert(tree.root, 24);
tree.root = tree.insert(tree.root, 27);
tree.root = tree.insert(tree.root, 29);
tree.root = tree.insert(tree.root, 34);
tree.root = tree.insert(tree.root, 14);
tree.root = tree.insert(tree.root, 4);
tree.root = tree.insert(tree.root, 10);
tree.root = tree.insert(tree.root, 22);
tree.root = tree.insert(tree.root, 13);
tree.root = tree.insert(tree.root, 3);
tree.root = tree.insert(tree.root, 2);
tree.root = tree.insert(tree.root, 6);
Console.WriteLine(
"Inorder traversal is "
);
tree.inorder(tree.root);
}
}