LeetCode 173. Binary Search Tree Iterator
2020-05-17 18:09:25
# leetcode
Problem
LeetCode 173. Binary Search Tree Iterator
1. 题目简述
实现一个二叉搜索树(BST树)的iterator类,其中包含next函数和hasNext函数。例如:
Example:
7
/ \
3 15
/ \
9 20
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
2. 算法思路
这又是一道关于设计的题目,很明显,最直接的方法,就是使用List按照中序遍历的顺序存储所有的节点,然后记录当前的index。
根据讨论区大佬的解法,这里还可以用到stack来帮助我们动态地来计算next节点,而不是一次性遍历所有。
为什么想到要用栈呢?因为就像非递归形式的中序遍历一样的想法,需要用到栈来帮助回溯到父节点。
或许还可以用Morris遍历?
3. 解法:
- 使用List,很笨,但很直接
1 |
|
- 使用Stack来帮助动态进行找next节点
1 | class BSTIterator { |