zoukankan      html  css  js  c++  java
  • 【leetcode】Binary Search Tree Iterator(middle)

    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.

    思路:

    说白了,就是把中序遍历拆成几个部分写。

    我的代码:

    class BSTIterator {
    public:
        BSTIterator(TreeNode *root) {
            pCur = root;
            while(pCur != NULL)
            {
                v.push_back(pCur);
                pCur = pCur->left;
            }
        }
    
        /** @return whether we have a next smallest number */
        bool hasNext() {
            return (!v.empty() || NULL != pCur);
        }
    
        /** @return the next smallest number */
        int next() {
            int num;
            TreeNode * tmp = v.back();
            v.pop_back();
            num = tmp->val;
            pCur = tmp->right;
            while(pCur != NULL)
            {
                v.push_back(pCur);
                pCur = pCur->left;
            }
            return num;
        }
    private:
        vector<TreeNode *> v;
        TreeNode * pCur;
    };

    大神更精简的代码: 经验,把相同功能的代码放在一起可以简化代码。

    public class BSTIterator {
    
            Stack<TreeNode> stack =  null ;            
            TreeNode current = null ;
    
            public BSTIterator(TreeNode root) {
                  current = root;        
                  stack = new Stack<> ();
            }
    
            /** @return whether we have a next smallest number */
            public boolean hasNext() {        
                  return !stack.isEmpty() || current != null;  
            }
    
                /** @return the next smallest number */
            public int next() {
                while (current != null) {
                    stack.push(current);
                    current = current.left ;
                }       
                TreeNode t = stack.pop() ;      
                current = t.right ;     
                return t.val ;
            }
        }
  • 相关阅读:
    并行执行计划
    mongodb数据查询-小结
    mongodb的基本操作-小结
    架构
    bat、dos控制多个后台程序启动
    python技术实践清单
    Linux升级安装python2.7.5到python2.7.9
    数据分析-GDP统计
    技术能力清单-小结
    动态链接库*.so
  • 原文地址:https://www.cnblogs.com/dplearning/p/4475866.html
Copyright © 2011-2022 走看看