zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    python3 -- 堆(heapq)
    二叉堆的实现(最大堆)
    解决layui layer.load() Ajax提交时,只在结束闪一下
    两个for循环嵌套,写成一个列表生成式
    time模块,计算当前时间和时间差
    私有化&property
    面向对象魔术方法之__str__()方法
    面向对象魔术方法-__del__()方法
    面向对象之魔术方法__init__()和__new__()
    Django的自定义标签
  • 原文地址:https://www.cnblogs.com/George1994/p/10630112.html
Copyright © 2011-2022 走看看