难度:中等
题目描述:
思路总结:这题首先就是想到了层次遍历,不好处理的点在,怎么保存上一个节点。两步操作,每层开始置None,判断pre为None的时候,也就是第一个几点,pre直接等于当前节点。但是这种做法不符合常数级空间的要求。
题解一:(不符合常数空间要求)
"""
# 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
"""
from collections import deque
class Solution:
def connect(self, root: 'Node') -> 'Node':
#层次遍历
if not root:return None
queue = deque([root])
while queue:
n = len(queue)
pre = None
for _ in range(n):
cur = queue.popleft()
if pre:
pre.next = cur
pre = pre.next
else:
pre = cur
if cur.left:queue.append(cur.left)
if cur.right:queue.append(cur.right)
pre = None
return root
题解一结果:
题解二:(非递归)
"""
# 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
"""
from collections import deque
class Solution:
def connect(self, root: 'Node') -> 'Node':
pre = root
while pre:
cur = pre
while cur:
if cur.left:cur.left.next = cur.right
if cur.right and cur.next:cur.right.next = cur.next.left
cur = cur.next
pre = pre.left
return root
题解二结果: