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;
        }
    };
    
    
  • 相关阅读:
    2020年秋招三星面试题
    物联网金融和互联网金融的区别与联系
    数据库事务的4种隔离级别
    Access-cookie之sqlmap注入
    SDL-软件安全开发周期流程
    图片马的制作
    ssrf内网端口爆破扫描
    逻辑漏洞_验证码绕过_密码找回漏洞
    平行越权与垂直越权
    xff注入
  • 原文地址:https://www.cnblogs.com/narjaja/p/9804344.html
Copyright © 2011-2022 走看看