[LintCode]Implement Iterator of Binary Search Tree
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
* Example of iterate a tree:
* Solution iterator = new Solution(root);
* while (iterator.hasNext()) {
* TreeNode node = iterator.next();
* do something for node
* }
*/
public class Solution {
//@param root: The root of binary tree.
ArrayList<TreeNode> list;
int index = 0; //指向下一个元素
public Solution(TreeNode root) {
// 2015-4-22 比较笨的方法需要O(n)的额外空间
list = inorder(root);
}
private ArrayList<TreeNode> inorder(TreeNode root) {
ArrayList<TreeNode> rst = new ArrayList<>();
if (root == null) {
return rst;
}
ArrayList<TreeNode> left = inorder(root.left);
ArrayList<TreeNode> right = inorder(root.right);
rst.addAll(left);
rst.add(root);
rst.addAll(right);
return rst;
}
//@return: True if there has next node, or false
public boolean hasNext() {
int len = list.size();
return index < len;
}
//@return: return next node
public TreeNode next() {
return list.get(index++);
}
}