一、原题
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 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直到和长的一样长。这样在循环时就不会有下标超出范围的错误提示。但是数据少还好,数据如果多的话这种方法并不好,因为必然会多占空间,但目前我只想到这一种方法,所以。。。如果有其他更好的解决方法麻烦告知,谢谢!!!