116. 填充每个节点的下一个右侧节点指针 二叉树 逆序BFS O(n)/ 利用 father.next遍历下层节点 O

Posted ChevisZhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了116. 填充每个节点的下一个右侧节点指针 二叉树 逆序BFS O(n)/ 利用 father.next遍历下层节点 O相关的知识,希望对你有一定的参考价值。

 

 

思路:

  法1. 本题逆序BFS,从右到左记录每一个level的visited, 但是这样就用了O(n)的额外空间

  法2.  官答

    1) 左子节点永远指向右子节点

    2)右子节点指向 None或者 父节点相邻节点的左子节点

      if fatherNode.next:  fatherNode.right.next = fatherNode.next.left

难点:

  1)本题没想到的地方就是,利用上层节点.next的操作,能遍历完整的下层节点,这样就完成对右节点.next的赋值

 

代码:

 

"""
# Definition for a Node.
class Node:
    def __init__(self, val: int = 0, left: \'Node\' = None, right: \'Node\' = None, next: \'Node\' = None):
        self.val = val
        self.left = left
        self.right = right
        self.next = next
"""
法1)
class Solution:
    def connect(self, root: \'Node\') -> \'Node\':
        visited = []
        def helper(node,level):
            if not node:
                return 
            if len(visited) == level:
                visited.append([])
                node.next = None
            else:
                node.next = visited[level][0]
                visited[level].pop()
            visited[level].append(node)
            helper(node.right,level+1)
            helper(node.left,level+1)
        helper(root,0)
        return root            

 

法2) 

class Solution:
    def connect(self, root: \'Node\') -> \'Node\':
        if not root:
            return root

        leftMost = root
        while leftMost.left:
            point = leftMost
            while point:
                # 对某节点,连接其左右子节点
                point.left.next = point.right
                # 如果其右边还有节点
                if point.next:
                    point.right.next = point.next.left
                else:
                    point.right.next = None
                point = point.next

            leftMost=leftMost.left
        return root

以上是关于116. 填充每个节点的下一个右侧节点指针 二叉树 逆序BFS O(n)/ 利用 father.next遍历下层节点 O的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode No.116 填充每个节点的下一个右侧节点指针

[LeetCode] 116. 填充每个节点的下一个右侧节点指针

LeetCode第116题—填充每个节点的下一个右侧节点指针—Python实现

Leetcode No.116 填充每个节点的下一个右侧节点指针(BFS)

116. 填充每个节点的下一个右侧节点指针

116. 填充每个节点的下一个右侧节点指针