方法一:借鉴层次遍历的思想,单独获得每一层节点的list然后对每一个list的next进行赋值。
空间复杂度O(k),k表示最后一层的叶节点数量,时间复杂度O(n)
class Solution:
def connect(self, root):
if root!=None:
temp_list=[root]
new_list=[root]
while True:
new_list=[]
while temp_list!=[]:
temp_node=temp_list.pop(0)
new_list.append(temp_node.left)
new_list.append(temp_node.right)
if new_list[0]==None:
break
for i in range(len(new_list)-1):
new_list[i].next=new_list[i+1]
temp_list=new_list
方法二:
直接在树节点上面进行修改,两层循环嵌套:第一层是以层次为一层,每次结束后,令node表示为node.left进入下一层,第二层循环是层次内部的节点的遍历,令node表示为node.next进入下一个节点。
class Solution:
def connect(self, root):
while root:
temp=root
while root and root.left:
root.left.next=root.right
if root.next:
root.right.next=root.next.left
root=root.next
root=temp.left
空间复杂度O(1),时间复杂度O(n)