本题想要将树内部的节点连接起来。这题的想法可以用BFS得到每层的节点,然后相连。也可以用DFS递归的方式去做。本人采用递归的方式处理该问题。为了能够进行内部连接,我们需要额外得到每棵树的最左边一排节点和最右边一排节点。因此重新定义函数额外返回这两个信息,然后将左子树的最右侧节点和右子树最左侧的节点相互连接,这样就可以得到最后我们的想要的结果。
代码如下:
"""
# Definition for a Node.
class Node(object):
def __init__(self, val, left, right, next):
self.val = val
self.left = left
self.right = right
self.next = next
"""
class Solution(object):
def connect(self, root):
"""
:type root: Node
:rtype: Node
"""
if root == None:
return None
if root.left == None and root.right == None:
return root
def dfs(root):
if root.left == None and root.right == None:
return root, list([root]), list([root])
left_root, left_left, left_right = dfs(root.left)
right_root, right_left, right_right = dfs(root.right)
for index in range(len(left_right)):
temp1 = left_right[index]
temp2 = right_left[index]
temp1.next = temp2
left_left.append(root)
right_right.append(root)
return root, left_left, right_right
result,_,_ = dfs(root)
return result