题目描述:
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。
调用 next()
将返回二叉搜索树中的下一个最小的数。
示例:
提示:
next()
和 hasNext()
操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度。next()
调用总是有效的,也就是说,当调用 next()
时,BST 中至少存在一个下一个最小的数。# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class BSTIterator(object):
#思路:先自定义一个中序遍历函数来保存所有节点的val值,根据val存储list来判断next函数和hasNext函数的返回值
def __init__(self, root):
"""
:type root: TreeNode
"""
self.root = root
self.index = 0
self.all_node = []
self.mid_find(root)
#自定义中序遍历函数
def mid_find(self,node):
if node != None:
self.mid_find(node.left)
self.all_node.append(node.val)
self.mid_find(node.right)
def next(self):
"""
@return the next smallest number
:rtype: int
"""
value = self.all_node[self.index]
self.index = self.index + 1
return value
def hasNext(self):
"""
@return whether we have a next smallest number
:rtype: bool
"""
return self.index < len(self.all_node)
# Your BSTIterator object will be instantiated and called as such:
# obj = BSTIterator(root)
# param_1 = obj.next()
# param_2 = obj.hasNext()
菜鸟一枚,代码仅供参考,如有问题,望指正~