返回
手撸二叉树合并之法:树上开花结果有妙招**
前端
2024-01-26 11:58:46
手撸二叉树合并,就像两棵大树互相依偎,根连根,枝交枝,共同孕育出参天巨树。在算法的世界里,树合并也是一项关键技术,今天我们就来探寻它的奥秘。
合并两棵二叉树,从字面上理解就是将两棵树的节点一一对应地合并在一起。具体步骤如下:
- 根节点合并: 首先,合并两棵树的根节点。如果两棵树的根节点都存在,则将它们的值相加。
- 左子树合并: 接着,递归地合并两棵树的左子树。如果两棵树的左子树都存在,则合并它们。否则,将其中一棵树的左子树作为合并后的左子树。
- 右子树合并: 与左子树合并类似,递归地合并两棵树的右子树。如果两棵树的右子树都存在,则合并它们。否则,将其中一棵树的右子树作为合并后的右子树。
通过这三个步骤,两棵二叉树就可以完美地合并在一起。
代码示例:
JavaScript:
function mergeTrees(t1, t2) {
if (!t1 && !t2) return null;
if (!t1) return t2;
if (!t2) return t1;
t1.val += t2.val;
t1.left = mergeTrees(t1.left, t2.left);
t1.right = mergeTrees(t1.right, t2.right);
return t1;
}
Java:
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
if (t1 == null && t2 == null) return null;
if (t1 == null) return t2;
if (t2 == null) return t1;
t1.val += t2.val;
t1.left = mergeTrees(t1.left, t2.left);
t1.right = mergeTrees(t1.right, t2.right);
return t1;
}
Python:
def mergeTrees(t1, t2):
if not t1 and not t2: return None
if not t1: return t2
if not t2: return t1
t1.val += t2.val
t1.left = mergeTrees(t1.left, t2.left)
t1.right = mergeTrees(t1.right, t2.right)
return t1
总结:
二叉树合并是一种重要的算法,在计算机科学中广泛应用。通过递归地合并根节点、左子树和右子树,我们可以将两棵二叉树无缝地结合在一起。JavaScript、Java 和 Python 中都有对应的代码示例,供大家参考和使用。掌握了这一算法,在解决相关问题时,将如虎添翼,事半功倍。