zoukankan      html  css  js  c++  java
  • 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.

    解决思路

    中序遍历+非递归(辅助栈)

    时间/空间复杂度均为O(logn).

    程序

    public class BSTIterator {
        private Stack<TreeNode> s;
        
        public BSTIterator(TreeNode root) {
            s = new Stack<>();
            pushLeft(root);
        }
        
        private void pushLeft(TreeNode node) {
            TreeNode cur = node;
            while (cur != null) {
                s.push(cur);
                cur = cur.left;
            }
        }
    
        /** @return whether we have a next smallest number */
        public boolean hasNext() {
            return !s.isEmpty();
        }
    
        /** @return the next smallest number */
        public int next() {
            TreeNode node = s.pop();
            pushLeft(node.right);
            return node.val;
        }
    }
    

      

  • 相关阅读:
    交易之道
    走出幻觉,走向成熟(阅读心得一)
    爱由心生
    正则资料整理(转载)
    需要学习的.NET技术(转载)
    抽象类与接口的区别
    心存感激
    MYSQL 远程访问被限制
    PHP积累
    Git积累
  • 原文地址:https://www.cnblogs.com/harrygogo/p/4655390.html
Copyright © 2011-2022 走看看