标签:一个 site end com efi 技术 地方 子节点 空间
思路:
法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(1)
标签:一个 site end com efi 技术 地方 子节点 空间
原文地址:https://www.cnblogs.com/ChevisZhang/p/12915931.html