【LeetCode with Python】 117. Populating Next Right Pointers in Each Node II

题目

原题页面:https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/
本文地址:http://leetcode.xnerv.wang/populating-next-right-pointers-in-each-node-ii/
题目类型:Tree, Depth-first SearchTwo Pointers
难度评价:Hard
类似题目:(M) Populating Next Right Pointers in Each Node

Follow up for problem "Populating Next Right Pointers in Each Node".

What if the given tree could be any binary tree? Would your previous solution still work?

Note:

  • You may only use constant extra space.

    For example,
    Given the following binary tree,

           1<br/>
         /  \<br/>
        2    3<br/>
       / \    \<br/>
      4   5    7<br/>
    

    After calling your function, the tree should look like:

           1 -> NULL<br/>
         /  \<br/>
        2 -> 3 -> NULL<br/>
       / \    \<br/>
      4-> 5 -> 7 -> NULL<br/>
    

分析

复用Populating Next Right Pointers in Each Node的代码直接可以通过。
(但是本题代码可能不符合题意要求,题目要求消耗常量空间)


代码

# Definition for a  binary tree node
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
        self.next = None

class Solution:
    # @param root, a tree node
    # @return nothing
    def connect(self, root):
        if None == root:
            return [ ]
        reflist1 = [root]
        while True:
            reflist2 = [ ]
            for i in range(0, len(reflist1)):
                cur = reflist1[i]
                if None != cur.left:
                    reflist2.append(cur.left)
                if None != cur.right:
                    reflist2.append(cur.right)
            if 0 == len(reflist2):
                break
            len_l = len(reflist2)
            for i in range(0, len_l - 1):
                reflist2[i].next = reflist2[i + 1]
            reflist2[len_l - 1].next = None
            reflist1 = reflist2

results matching ""

    No results matching ""