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.

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

    Approach #1: C++.

    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class BSTIterator {
    public:
        BSTIterator(TreeNode *root) {
            helper(root);
        }
    
        /** @return whether we have a next smallest number */
        bool hasNext() {
            if (minNums.empty()) return false;
            else return true;
        }
    
        /** @return the next smallest number */
        int next() {
            TreeNode* cur = minNums.top();
            minNums.pop();
            helper(cur->right);
            return cur->val;
        }
    private:
        stack<TreeNode*> minNums;
        void helper(TreeNode* root) {
            while (root != nullptr) {
                minNums.push(root);
                root = root->left;
            }
        }
    };
    
    /**
     * Your BSTIterator will be called like this:
     * BSTIterator i = BSTIterator(root);
     * while (i.hasNext()) cout << i.next();
     */
    

      

    Approach #2: Java.

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

      

    Approach #3: Python.

    # Definition for a  binary tree node
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class BSTIterator(object):
        def __init__(self, root):
            """
            :type root: TreeNode
            """
            self.stack = list()
            self.helper(root)
            
    
        def hasNext(self):
            """
            :rtype: bool
            """
            return self.stack
            
    
        def next(self):
            """
            :rtype: int
            """
            cur = self.stack.pop()
            self.helper(cur.right)
            return cur.val
            
        def helper(self, root):
            while root is not None:
                self.stack.append(root)
                root = root.left
            
    
    # Your BSTIterator will be called like this:
    # i, v = BSTIterator(root), []
    # while i.hasNext(): v.append(i.next())
    

      

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    [kuangbin带你飞]专题十二 基础DP1 E
    hdu 1203 I NEED A OFFER! (01背包)
    hdu 2602 Bone Collector (01背包)
    hdu 4513 吉哥系列故事——完美队形II (manacher)
    hdu 2203 亲和串 (KMP)
    hdu 1686 Oulipo (KMP)
    hdu 1251 统计难题 (字典树)
    hdu 2846 Repository (字典树)
    hdu 1711 Number Sequence (KMP)
    poj 3461 Oulipo(KMP)
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10011307.html
Copyright © 2011-2022 走看看