二叉查找树迭代器

来源:互联网 发布:战无不胜灵宠进阶数据 编辑:程序博客网 时间:2024/05/16 01:41

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

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

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

       10 /    \1      11 \       \  6       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: * Solution iterator = Solution(root); * while (iterator.hasNext()) { *    TreeNode * node = iterator.next(); *    do something for node */class Solution {public:    //@param root: The root of binary tree.    Solution(TreeNode *root) {        // write your code here        TreeNode *cur = root;while (cur != NULL){buf.push(cur);cur = cur->left;}    }    //@return: True if there has next node, or false    bool hasNext() {        // write your code here        return buf.empty()? false : true;    }        //@return: return next node    TreeNode* next() {        // write your code here        if (buf.empty()){return NULL;}TreeNode *top = buf.top();buf.pop();if (top->right){TreeNode *cur = top->right;buf.push(cur);cur = cur->left;while (cur){buf.push(cur);cur = cur->left;}}return top;    }private:stack<TreeNode*> buf;};


0 0