蠡口117. Populating Next Right Pointers in Each Node II

蠡口116的延续。这道题想了半天想不出递归地做法。于是想到了层次遍历,可以循环地做以下操作:

  1)把每层的数据从左到右地放在一个队列里,pop出左边的元素,设为pre;

  2)若元素是该层最右非空元素,那不需要做任何操作;否则把pop之后的队首元素作为pre的next;

  3)把pre的左右非空孩子依次加入队列,以备下一层的操作;

注意,当前层的元素的最右端的next不是下一层的最左端的,所以每次循环只对当前层的元素赋值,用一个for循环就可以搞定。这道题的解法可以用于蠡口116。

class Solution(object):
    def connect(self, root):
        """
        :type root: Node
        :rtype: Node
        """
        if root==None: return(None)
        q=collections.deque([root])
        while q:
            size=len(q)
            for i in range(size):
                pre=q.popleft()
                if i<size-1: pre.next=q[0]
                if pre.left: q.append(pre.left)
                if pre.right: q.append(pre.right)
        return(root)

 

posted @ 2019-10-20 02:21  热锅上的码裔  阅读(140)  评论(0)    收藏  举报