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;
        }
    };
    
    
  • 相关阅读:
    【内推面试分享】普通本科的蚂蚁金服校招面试经验分享,内附答案
    Json解析
    创建新的MessageBox窗口前,先关掉之前已经创建好的
    TcxCheckComboBox的使用
    Delphi调用C#的DLL
    StringGrid数据导出到Excel
    从Excel导入信息在StringGrid显示
    JS的修饰符
    局部变量和全局变量
    List注意啊
  • 原文地址:https://www.cnblogs.com/narjaja/p/9804344.html
Copyright © 2011-2022 走看看