package com.interview.tree;
import java.util.HashSet;
import java.util.Set;
import java.util.Stack;
/**
* http://www.glassdoor.com/Interview/Create-an-iterator-to-traverse-a-binary-tree-When-the-next-function-is-called-on-the-binary-tree-return-the-value-at-the-QTN_674695.htm
* null tree.
*/
public class NextInorderSuccessorIterator {
private Node root = null;
Stack<Node> stack = new Stack<Node>();
Set<Node> visited = new HashSet<Node>();
NextInorderSuccessorIterator(Node root){
this.root = root;
}
public int next(){
Node node = null;
while(root != null){
stack.push(root);
root = root.left;
}
root = stack.pop();
node = root;
root = root.right;
return node.data;
}
public boolean hasNext(){
if(root != null || stack.size() > 0){
return true;
}
return false;
}
public static void main(String args[]){
BinaryTree bt = new BinaryTree();
Node node = null;
node = bt.addNode(10, node);
node = bt.addNode(-5, node);
node = bt.addNode(7, node);
node = bt.addNode(20, node);
node = bt.addNode(3, node);
node = bt.addNode(14, node);
NextInorderSuccessorIterator nis = new NextInorderSuccessorIterator(node);
while(nis.hasNext()){
System.out.println(nis.next());
}
}
}