【LeetCode 617】合并二叉树(Python)

一、原题
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

示例 1:
注意: 合并必须从两个树的根节点开始。在这里插入图片描述

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-binary-trees
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

代码:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode:
        x=[]
        if t1 is None:
            return t2
        elif t2 is not None:
            t1.val=t1.val+t2.val
            t1.left=self.mergeTrees(t1.left,t2.left)
            t1.right=self.mergeTrees(t1.right,t2.right)
        return t1

遇到的问题(注意事项):
t1,t2是字典形式,在前面的注释里有。所以用.values来每个单元的取值。
要添加左右节点的赋值,如果不赋值,除根节点外,二叉树的分支就还是t1的。
难度不高

二、变形题
因为我一开始以为t1和t2是列表的形式,所以就以列表为前提写了一个程序。(合并列表)
一起放在下面以供参考,欢迎提意见。我写的太过繁琐肯定不是最优写法。所以如果有人看后有不同见解,真心希望可以提出讨论一下。

t1=[1,3,2,5]
t2=[2,1,3,None,4,None,7]
x=0
y=[]

n=0
m=len(t2)-len(t1)
print(m)
if m>=0:
	for n in range(m):
		t1.append(None)
print(t1)


for i in range(len(t2)):
	if t1[i]==None:
		y.append(t2[i])
	elif t2[i]==None:
		y.append(t1[i])
	else:
		x=t1[i]+t2[i]
		y.append(x)
print(y)

输出:
与原题结果相同,最后一行为结果。在这里插入图片描述
难点:
我觉得列表处理起来比字典要难,因为t1和t2的长度不同存在下标溢出的情况为。为了解决溢出问题,我想到的办法是通过对t1和t做减法(比价长度),将短的那个补充None直到和长的一样长。这样在循环时就不会有下标超出范围的错误提示。但是数据少还好,数据如果多的话这种方法并不好,因为必然会多占空间,但目前我只想到这一种方法,所以。。。如果有其他更好的解决方法麻烦告知,谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值