173. 二叉搜索树迭代器

Posted george1994

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了173. 二叉搜索树迭代器相关的知识,希望对你有一定的参考价值。

173. 二叉搜索树迭代器

题意

实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。

调用 next() 将返回二叉搜索树中的下一个最小的数。

  • next()hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度。

  • 你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 中至少存在一个下一个最小的数。

解题思路

由于题目要求使用O(h)的内存,也就是说不再允许将所有的结点都存储下来再去取,因此那些利用中序遍历将所有结点存储下来的方法都不符合题目的要求,这道题目应该是只存储一部分的结点(比如只存左子结点或者只存右子结点);

stack只保存左孩子,当最左的孩子出列时,如果它有右孩子,就把它右孩子以及往下的所有左节点压入栈;

实现

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)

以上是关于173. 二叉搜索树迭代器的主要内容,如果未能解决你的问题,请参考以下文章

leetcode_173二叉搜索树迭代器

⭐算法入门⭐《二叉树 - 二叉搜索树》中等06 —— LeetCode 173. 二叉搜索树迭代器

[JavaScript 刷题] 树 - 二叉搜索树迭代器, leetcode 173

[JavaScript 刷题] 树 - 二叉搜索树迭代器, leetcode 173

剑指 Offer II 055. 二叉搜索树迭代器|173. 二叉搜索树迭代器(java / c / c++ / python / go / rust)

173 Binary Search Tree Iterator 二叉搜索树迭代器