二叉搜索树迭代器(python)

题目描述:

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

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

示例:

        二叉搜索树迭代器(python)_第1张图片

提示:

  • next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(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()

菜鸟一枚,代码仅供参考,如有问题,望指正~

你可能感兴趣的:(Python)