using
System;
using
System.Collections.Generic;
public
class
TreeNode
{
public
int
val;
public
TreeNode left;
public
TreeNode right;
public
TreeNode(
int
x)
{
val = x;
}
}
public
class
BSTIterator{
Stack<TreeNode> s;
public
BSTIterator(TreeNode root)
{
s =
new
Stack<TreeNode>();
TreeNode curr = root;
while
(curr !=
null
)
{
s.Push(curr);
curr = curr.left;
}
}
TreeNode curr()
{
return
s.Peek();
}
public
void
next()
{
TreeNode temp = s.Peek().right;
s.Pop();
while
(temp !=
null
)
{
s.Push(temp);
temp = temp.left;
}
}
public
bool
isEnd()
{
return
s.Count!=0;
}
public
void
iterate()
{
while
(isEnd())
{
Console.Write(curr().val +
" "
);
next();
}
}
}
public
class
BinaryTree{
TreeNode root;
public
static
void
Main(String []args)
{
BinaryTree tree =
new
BinaryTree();
tree.root =
new
TreeNode(5);
tree.root.left =
new
TreeNode(3);
tree.root.right =
new
TreeNode(7);
tree.root.left.left =
new
TreeNode(2);
tree.root.left.right =
new
TreeNode(4);
tree.root.right.left =
new
TreeNode(6);
tree.root.right.right =
new
TreeNode(8);
BSTIterator it =
new
BSTIterator(tree.root);
it.iterate();
}
}