zoukankan      html  css  js  c++  java
  • 86. 二叉查找树迭代器

    描述

    设计实现一个带有下列属性的二叉查找树的迭代器:

    • 元素按照递增的顺序被访问(比如中序遍历)
    • next()和hasNext()的询问操作要求均摊时间复杂度是O(1)

    样例

    对于下列二叉查找树,使用迭代器进行中序遍历的结果为 [1, 6, 10, 11, 12]

    挑战

    额外空间复杂度是O(h),其中h是这棵树的高度
    Super Star:使用O(1)的额外空间复杂度

    /**
     * Definition of TreeNode:
     * class TreeNode {
     * public:
     *     int val;
     *     TreeNode *left, *right;
     *     TreeNode(int val) {
     *         this->val = val;
     *         this->left = this->right = NULL;
     *     }
     * }
     * Example of iterate a tree:
     * BSTIterator iterator = BSTIterator(root);
     * while (iterator.hasNext()) {
     *    TreeNode * node = iterator.next();
     *    do something for node
     */
    
    
    class BSTIterator {
    public:
        /*
        * @param root: The root of binary tree.
        */
        
        std::stack<TreeNode *>  stk;
        BSTIterator(TreeNode * root) {
            // do intialization if necessary
            while(root != NULL) {
                stk.push(root);
                root = root->left;
            }
        }
    
        /*
         * @return: True if there has next node, or false
         */
        bool hasNext() {
            // write your code here
            return !stk.empty();
        }
    
        /*
         * @return: return next node
         */
        TreeNode * next() {
            // write your code here
            TreeNode* ans = stk.top();
            stk.pop();
            TreeNode* tmp = ans->right;
            while (tmp != NULL) {
                stk.push(tmp);
                tmp = tmp->left;
            }
            return ans;
        }
    };
    
    
  • 相关阅读:
    谜题48:我所得到的都是静态的
    谜题47:啊呀!我的猫变成狗了
    谜题46:令人混淆的构造器案例
    谜题45:令人疲惫不堪的测验
    谜题44:切掉类
    Python--csv文件处理
    Python装饰器
    Python单例模式
    <<Senium2自动化测试>>读书笔记二
    python之内置函数
  • 原文地址:https://www.cnblogs.com/narjaja/p/9804344.html
Copyright © 2011-2022 走看看