leetcode 116

本题想要将树内部的节点连接起来。这题的想法可以用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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值