Binary Search Tree Iterator

来源:互联网 发布:淘宝小号在哪里购买 编辑:程序博客网 时间:2024/05/01 20:07

Binary Search Tree Iterator


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.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

This is a problem about in-order traversal, but we need to implement it iteratively.


 1. Initialization: push the leftmost tree nodes into stack.

 2. If the stack is not empty, we know that it still has element hasn't been visited.
 3. If the current element has right child, pop the current element and push the right child into the stack, then keep pushing the leftmost tree nodes of current node into stack.

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class BSTIterator {        private Stack<TreeNode> stack;        public BSTIterator(TreeNode root) {        stack = new Stack<TreeNode>();        while (root != null) {            stack.push(root);            root = root.left;        }    }        /** @return whether we have a next smallest number */    public boolean hasNext() {        return !stack.isEmpty();    }    /** @return the next smallest number */    public int next() {        TreeNode node = stack.pop();        int ret = node.val;                if (node.right != null) {            node = node.right;            while (node != null) {                stack.push(node);                node = node.left;            }        }                return ret;            }}/** * Your BSTIterator will be called like this: * BSTIterator i = new BSTIterator(root); * while (i.hasNext()) v[f()] = i.next(); */ 

0 0
原创粉丝点击