📅  最后修改于: 2023-12-03 15:28:27.799000             🧑  作者: Mango
在二叉树中,我们可以通过节点的值进行求和。本篇文章将讨论如何通过递归和迭代的方式合并两个二叉树。
给定两个二叉树,在它们每个节点上添加值,并将它们合并为一个新的二叉树。合并规则是如果两个节点重叠,则将节点值加起来作为合并节点的新值。否则不重叠的节点将作为新节点添加到新树中。
递归合并两个二叉树的方式比较简单,我们可以遍历两个二叉树的节点,并递归合并它们。对于递归合并节点的函数,我们可以递归合并两个节点的左子树和右子树,并将它们的值相加作为新节点的值。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode:
if not t1:
return t2
if not t2:
return t1
t1.val += t2.val
t1.left = self.mergeTrees(t1.left, t2.left)
t1.right = self.mergeTrees(t1.right, t2.right)
return t1
调用 mergeTrees()
方法测试:
t1 = TreeNode(1, TreeNode(3, TreeNode(5)), TreeNode(2))
t2 = TreeNode(2, TreeNode(1, None, TreeNode(4)), TreeNode(3, None, TreeNode(7)))
result = mergeTrees(t1, t2)
# 遍历新二叉树
迭代合并两个二叉树需要使用队列来实现。我们可以将节点存储在队列中,并在接下来的迭代中使用它们来创建新节点。
def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode:
if not t1:
return t2
if not t2:
return t1
queue = []
queue.append((t1, t2))
while queue:
t = queue.pop(0)
if not t[0] or not t[1]:
continue
t[0].val += t[1].val
if not t[0].left:
t[0].left = t[1].left
else:
queue.append((t[0].left, t[1].left))
if not t[0].right:
t[0].right = t[1].right
else:
queue.append((t[0].right, t[1].right))
return t1
调用 mergeTrees()
方法测试:
t1 = TreeNode(1, TreeNode(3, TreeNode(5)), TreeNode(2))
t2 = TreeNode(2, TreeNode(1, None, TreeNode(4)), TreeNode(3, None, TreeNode(7)))
result = mergeTrees(t1, t2)
# 遍历新二叉树
本篇文章讨论了递归和迭代两种方式合并两个二叉树。和对比可以看出,递归方式比较简单直接,迭代方式则需要使用队列进行辅助。在实际应用中可以根据情况选择使用递归或者迭代的方式。