leetcode 173. 二叉搜索树迭代器 medium
题目描述:
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。
调用 next()
将返回二叉搜索树中的下一个最小的数。
提示:
next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度。
你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 中至少存在一个下一个最小的数。
解题思路:
题目要求的next 时间复杂度是 O(1),是指平均时间复杂度,ORZ。
这道题其实就是把非递归版中序遍历,给拆开
代码:
class BSTIterator {
public:
stack<TreeNode*> stk;
BSTIterator(TreeNode* root) {
while(root){
stk.push(root);
root=root->left;
}
}
/** @return the next smallest number */
int next() {
TreeNode *cur=stk.top();
stk.pop();
int res=cur->val;
cur=cur->right;
while(cur){
stk.push(cur);
cur=cur->left;
}
return res;
}
/** @return whether we have a next smallest number */
bool hasNext() {
return stk.size();
}
};