116
思路
DFS递归
class Solution(object):
def connect(self, root):
if not root:
return None
if root.left:
root.left.next = root.right
if root.next:
root.right.next = root.next.left
self.connect(root.left)
self.connect(root.right)
return root
BFS
遍历每一层,使每一个节点指向它最右的节点(最右节点除外)
class Solution(object):
def connect(self, root):
if not root:
return None
queue = [root]
while queue:
queue_next = []
for i in range(len(queue)):
if queue[i].left:
queue_next.append(queue[i].left)
if queue[i].right:
queue_next.append(queue[i].right)
if i < len(queue) - 1:
queue[i].next = queue[i + 1]
queue = queue_next
return root
117
思路
与116题不同的是,给定的二叉树不是个完美二叉树,即可能存在节点没有左右子节点的情况
BFS
class Solution(object):
def connect(self, root):
if not root:
return None
queue = [root]
while queue:
next_queue = []
for i in range(len(queue)):
if queue[i].left:
next_queue.append(queue[i].left)
if queue[i].right:
next_queue.append(queue[i].right)
if i < len(queue) - 1:
queue[i].next = queue[i + 1] #进行next指针操作
queue = next_queue
return root