173. Binary Search Tree Iterator
tree stack
Last updated
Was this helpful?
tree stack
Last updated
Was this helpful?
Implement the BSTIterator
class that represents an iterator over the of a binary search tree (BST):
BSTIterator(TreeNode root)
Initializes an object of the BSTIterator
class. The root
of the BST is given as part of the constructor. The pointer should be initialized to a non-existent number smaller than any element in the BST.
boolean hasNext()
Returns true
if there exists a number in the traversal to the right of the pointer, otherwise returns false
.
int next()
Moves the pointer to the right, then returns the number at the pointer.
Notice that by initializing the pointer to a non-existent smallest number, the first call to next()
will return the smallest element in the BST.
You may assume that next()
calls will always be valid. That is, there will be at least a next number in the in-order traversal when next()
is called.
Example 1:
Constraints:
The number of nodes in the tree is in the range [1, 10
5
]
.
0 <= Node.val <= 10
6
At most 10
5
calls will be made to hasNext
, and next
.
Follow up:
Could you implement next()
and hasNext()
to run in average O(1)
time and use O(h)
memory, where h
is the height of the tree?
分析
中序遍历 BST 的顺序是:左 → 根 → 右。 我们用一个栈模拟这个过程,并只存一条路径:
一路往左压栈,把最小的元素放到栈顶
next()
:弹出栈顶元素(当前最小)
然后如果这个节点有右子树,把它的右子树的左边一条路径压栈