173. 二叉搜索树迭代器

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

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

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

class BSTIterator(object):
    def __init__(self, root):
        """
        :type root: TreeNode
        """
        self.stack=Stack()
        while root:#初始先将根节点和它的全部是左子树的节点压入栈
            self.stack.push(root)
            root=root.left
    def hasNext(self):
        """
        :rtype: bool
        """
        return not  self.stack.isEmpty()#直接判断栈是否为空即可
    def next(self):
        """
        :rtype: int
        """
        #由于是bst
        result=self.stack.pop()
        if not result:
            return 
        r=result.right  #出栈一个节点后  同样将他的全部左子树压栈
        while r:
            self.stack.push(r)
            r=r.left

        return  result.val

        

# Your BSTIterator will be called like this:
# i, v = BSTIterator(root), []
# while i.hasNext(): v.append(i.next())
class Stack(object):
    def __init__(self):
        self.index=-1
        self.arr=[]
    def push(self,value):
        self.arr.append(value)
        self.index+=1
    def isEmpty(self):
        if self.index>=0:
            return False
        return  True
    def pop(self):
        if self.isEmpty():
            return
        temp=self.arr[self.index]
        self.arr.pop(-1)
        self.index-=1
        return  temp

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值