美文网首页
LintCode: Binary Search Tree Ite

LintCode: Binary Search Tree Ite

作者: 阿斯特拉 | 来源:发表于2017-04-10 07:14 被阅读0次

与二叉树的中序遍历(非递归)相似, 以一个数组来存储stand-by的节点, 以root和stack来判定是否hasNext(), 当hasNext()为True的时候, 如果root为None, 则从stack中提取下一个节点, 如果root的左子树不为空, 则1, 将左儿子保存, 2, 将当前节点的左儿子设置为None, 3, 将当前节点存入stack中, 4, 将当前节点的左儿子设为当前节点; 如果root的左子树为空, 则将root保存准备返还, 然后如果右儿子不为空, 将root节点设为右儿子, 然后返还保存的root节点, 如果右儿子为空, 则返还root的同时, 将root设置为None

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None

Example of iterate a tree:
iterator = BSTIterator(root)
while iterator.hasNext():
    node = iterator.next()
    do something for node 
"""
class BSTIterator:
    #@param root: The root of binary tree.
    def __init__(self, root):
        # write your code here
        self.stack = []
        self.head = root

    #@return: True if there has next node, or false
    def hasNext(self):
        # write your code here
        if self.head or self.stack:
            return True
        return False

    #@return: return next node
    def next(self):
        #write your code here
        if not self.head:
            self.head = self.stack.pop()
        else:
            while self.head.left:
                t = self.head.left
                self.head.left = None
                self.stack.append(self.head)
                self.head = t
            else:
                ret = self.head
                if self.head.right:
                    self.head = self.head.right
                else:
                    if self.stack:
                        self.head = self.stack.pop()
                    else:
                        self.head = None
                return ret

相关文章

网友评论

      本文标题:LintCode: Binary Search Tree Ite

      本文链接:https://www.haomeiwen.com/subject/ganjattx.html