实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。
调用 next()
将返回二叉搜索树中的下一个最小的数。
注意: next()
和hasNext()
操作的时间复杂度是O(1),并使用 O(h) 内存,其中 h 是树的高度。
class BSTIterator(object):
def __init__(self, root):
"""
:type root: TreeNode
"""
self.stack=Stack()
while root:#初始先将根节点和它的全部是左子树的节点压入栈
self.stack.push(root)
root=root.left
def hasNext(self):
"""
:rtype: bool
"""
return not self.stack.isEmpty()#直接判断栈是否为空即可
def next(self):
"""
:rtype: int
"""
#由于是bst
result=self.stack.pop()
if not result:
return
r=result.right #出栈一个节点后 同样将他的全部左子树压栈
while r:
self.stack.push(r)
r=r.left
return result.val
# Your BSTIterator will be called like this:
# i, v = BSTIterator(root), []
# while i.hasNext(): v.append(i.next())
class Stack(object):
def __init__(self):
self.index=-1
self.arr=[]
def push(self,value):
self.arr.append(value)
self.index+=1
def isEmpty(self):
if self.index>=0:
return False
return True
def pop(self):
if self.isEmpty():
return
temp=self.arr[self.index]
self.arr.pop(-1)
self.index-=1
return temp