class Solution(object):
def connect(self, root):
"""
:type root: Node
:rtype: Node
"""
if not root:
return root
pre = root
# 循环条件是当前节点的left不为空,当只有根节点
# 或所有叶子节点都出串联完后循环就退出了
while pre.left:
tmp = pre
while tmp:
# 将tmp的左右节点都串联起来
# 注:外层循环已经判断了当前节点的left不为空
tmp.left.next = tmp.right
# 下一个不为空说明上一层已经帮我们完成串联了
if tmp.next:
tmp.right.next = tmp.next.left
# 继续右边遍历
tmp = tmp.next
# 从下一层的最左边开始遍历
pre = pre.left
return root
总结:和117题如出一辙,这个题目更加简单,是一个完全二叉树,从每一层的最左边开始链,直到这层链完了,tmp为空,进入下一次,如何连接不同父节点的子节点?只要保证这个父节点是相连的,那么利用父节点的关系就可以进行连接了。也就是tmp.right.next=tmp.next.left进行连接。当然也可以用BFS的模板进行串联也是一样的。