zoukankan      html  css  js  c++  java
  • LeetCode——Binary Search Tree Iterator

    Description:

    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.

    实现一个迭代器来遍历二叉查找树。当然首先想到的方法就是中序遍历把有序元素保存在容器中,顺序操作。但是要求uses O(h) memory就不能这样干了。

    这里用一个栈来做暂存器,先把所有左节点压栈,这时栈定就一定是最小的元素。之后出栈返回当前的栈顶元素,对于栈顶元素,把以其为顶点的右子树的所有左节点都压栈。以此类推,直到所有元素都遍历一遍。在uses O(h) memory的要求下完成了二叉查找树的遍历。

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    
    public class BSTIterator {
        public 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.empty();
        }
    
        /** @return the next smallest number */
        public int next() {
            
            TreeNode node = stack.peek();
            int nextVal = node.val;
            stack.pop();
            TreeNode t = node.right;
            while(t != null) {
                stack.push(t);
                t = t.left;
            }
            
            return nextVal;
        }
    }
    
    /**
     * Your BSTIterator will be called like this:
     * BSTIterator i = new BSTIterator(root);
     * while (i.hasNext()) v[f()] = i.next();
     */
    
  • 相关阅读:
    eclipse中注释模板的修改
    Oracle 解锁Record is locked by another user
    Oracle 解锁Record is locked by another user
    提高网站速度的最佳实践
    Tomcat中配置SSL
    CentOS QQ
    csshack
    文件contentType
    JavaScript实现Iframe自适应其加载的内容高度
    转timer
  • 原文地址:https://www.cnblogs.com/wxisme/p/4606401.html
Copyright © 2011-2022 走看看