标签:
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.
Calling next()
will return the next smallest number in the BST.
Note: next()
and hasNext()
should
run in average O(1) time and uses O(h) memory, where h is the height of the tree.
先实现中序遍历代码。然后改造为迭代器。
public class BSTIterator { private TreeNode node; private Stack<TreeNode> stack; public BSTIterator(TreeNode root) { node = root; stack = new Stack<TreeNode>(); while (node != null) { stack.push(node); node = node.left; } } /** * @return whether we have a next smallest number */ public boolean hasNext() { return !stack.empty(); } /** * @return the next smallest number */ public int next() { TreeNode t = node = stack.pop(); if (node.right != null) { node = node.right; while (node != null) { stack.push(node); node = node.left; } } return t.val; } public void inOrder(TreeNode root) { TreeNode node = root; while (node != null) { stack.push(node); node = node.left; } while (!stack.empty()) { System.out.print((node = stack.pop()) + ","); if (node.right != null) { node = node.right; while (node != null) { stack.push(node); node = node.left; } } } } }
标签:
原文地址:http://blog.csdn.net/wongson/article/details/45076829