二叉搜索树迭代器

二叉搜索树迭代器

 

 

 

   这题主要是读题,理解了题意就好做了。题中主要的目的是完成:

  1.next()函数,用来获得下一个最大值

  2.hasnext()函数,用来获得是否有下一个节点

  3.init函数,初始化的时候需要做的工作

  那么思路就很清晰了,我们将所有节点的值保存在一个list里面,然后访问的时候就简单了。所以先写一个中序遍历的函数,为什么是中序遍历?因为二叉搜索树的中序遍历的结果的递增的,所以我们中序遍历后直接可以得到我们想要的结果。我们拿到了这个搜索树排序好的所有节点值后,存储起来,那么next函数我们就可以将里面的值一个一个返回,hasnext函数就是和长度相关的判定了。问题迎刃而解。

  

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class BSTIterator:
    def inorder(self,root):
        if not root:
            return 
        self.inorder(root.left)
        self.root_val.append(root.val)
        self.inorder(root.right)

    def __init__(self, root: TreeNode):
        self.root_val = []
        self.inorder(root)
        self.len_tree = len(self.root_val)
        self.dq = -1


    def next(self) -> int:
        self.dq+=1
        return self.root_val[self.dq]

    def hasNext(self) -> bool:
        if self.len_tree <= self.dq + 1:
            return False
        else:
            return True


# Your BSTIterator object will be instantiated and called as such:
# obj = BSTIterator(root)
# param_1 = obj.next()
# param_2 = obj.hasNext()

 

 
posted @ 2021-03-17 08:54  灰人  阅读(65)  评论(0)    收藏  举报