算法描述:
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.
Calling next() will return the next smallest number in the BST.
Example:

BSTIterator iterator = new BSTIterator(root); iterator.next(); // return 3 iterator.next(); // return 7 iterator.hasNext(); // return true iterator.next(); // return 9 iterator.hasNext(); // return true iterator.next(); // return 15 iterator.hasNext(); // return true iterator.next(); // return 20 iterator.hasNext(); // return false
Note:
next()andhasNext()should run in average O(1) time and uses O(h) memory, where h is the height of the tree.- You may assume that
next()call will always be valid, that is, there will be at least a next smallest number in the BST whennext()is called.
解题思路:用栈模拟先序遍历。
public: BSTIterator(TreeNode* root) { while(root!=nullptr){ stk.push(root); root=root->left; } } /** @return the next smallest number */ int next() { int res = -1; if(!stk.empty()){ TreeNode* cur = stk.top(); stk.pop(); res = cur->val; cur=cur->right; while(cur!=nullptr){ stk.push(cur); cur=cur->left; } } return res; } /** @return whether we have a next smallest number */ bool hasNext() { return !stk.empty(); } private: stack<TreeNode*> stk;
本文介绍了一种在二叉搜索树中实现迭代器的方法,该迭代器可以在平均O(1)的时间复杂度和O(h)的空间复杂度下运行next()和hasNext()操作,其中h为树的高度。通过使用栈来模拟先序遍历,确保每次调用next()都能返回树中下一个最小的数值。
3587

被折叠的 条评论
为什么被折叠?



