设计实现一个带有下列属性的二叉查找树的迭代器:
- 元素按照递增的顺序被访问(比如中序遍历)
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; };