173. 二叉搜索樹迭代器

173. 二叉搜索樹迭代器

題意

實現一個二叉搜索樹迭代器。你將使用二叉搜索樹的根節點初始化迭代器。node

調用 next() 將返回二叉搜索樹中的下一個最小的數。web

  • next()hasNext() 操做的時間複雜度是 O(1),並使用 O(h) 內存,其中 h 是樹的高度。app

  • 你能夠假設 next() 調用老是有效的,也就是說,當調用 next() 時,BST 中至少存在一個下一個最小的數。ide

解題思路

因爲題目要求使用O(h)的內存,也就是說再也不容許將全部的結點都存儲下來再去取,所以那些利用中序遍歷將全部結點存儲下來的方法都不符合題目的要求,這道題目應該是隻存儲一部分的結點(好比只存左子結點或者只存右子結點);spa

stack只保存左孩子,當最左的孩子出列時,若是它有右孩子,就把它右孩子以及往下的全部左節點壓入棧;code

實現

class BSTIterator(object):

   def __init__(self, root):
       """
      :type root: TreeNode
      """
       self.stack = []
       self.__find_left_nodes(root)
       
   def __find_left_nodes(self, node):
       while node:
           self.stack.append(node)
           node = node.left
       

   def next(self):
       """
      @return the next smallest number
      :rtype: int
      """
       node = self.stack.pop()
       self.__find_left_nodes(node.right)
       return node.val
       

   def hasNext(self):
       """
      @return whether we have a next smallest number
      :rtype: bool
      """
       return bool(self.stack)
相關文章
相關標籤/搜索