美文网首页
116. Populating Next Right Point

116. Populating Next Right Point

作者: xiaoyaook | 来源:发表于2017-11-14 21:18 被阅读0次

这里假定每棵树都是完美二叉树
思路:
首先验证是否存在当前节点,以及当前节点的左子节.
从当前层操作下一层,外层循环每次一都使层次下降一层,并使当前节点为当前层次最左端.
内层循环从最左端节点开始,用next每次循环向右移动一个节点,直到null.

class Solution:
    # @param root, a tree link node
    # @return nothing
    def connect(self, root):
        while root and root.left:
            next = root.left
            while root:
                root.left.next = root.right
                root.right.next = root.next and root.next.left
                root = root.next
            root = next

注意,python中的and从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值。
or也是从左到右计算表达式,返回第一个为真的值,若都为假,返回最后一个假值.

117.假定给的树为任意二叉树
那么上面的策略就不能用了,因为不能保证最左端始终有节点.
这次的思路是:
引入两个节点prekid = kid = TreeLinkNode(0)
每层都开始于一个dummy node prekid
root在当前层,kid在下一层,
prekid.next是下一层的头结点
内层循环结束时,root, kid = prekid.next, prekid
把root变成下层的头结点,kid重新变为dummy node

def connect(self, root):
    prekid = kid = TreeLinkNode(0)
    while root:
        while root:
            kid.next = root.left
            kid = kid.next or kid
            kid.next = root.right
            kid = kid.next or kid
            root = root.next
        root, kid = prekid.next, prekid

相关文章

网友评论

      本文标题:116. Populating Next Right Point

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