返回

手撸二叉树合并之法:树上开花结果有妙招**

前端

手撸二叉树合并,就像两棵大树互相依偎,根连根,枝交枝,共同孕育出参天巨树。在算法的世界里,树合并也是一项关键技术,今天我们就来探寻它的奥秘。

合并两棵二叉树,从字面上理解就是将两棵树的节点一一对应地合并在一起。具体步骤如下:

  1. 根节点合并: 首先,合并两棵树的根节点。如果两棵树的根节点都存在,则将它们的值相加。
  2. 左子树合并: 接着,递归地合并两棵树的左子树。如果两棵树的左子树都存在,则合并它们。否则,将其中一棵树的左子树作为合并后的左子树。
  3. 右子树合并: 与左子树合并类似,递归地合并两棵树的右子树。如果两棵树的右子树都存在,则合并它们。否则,将其中一棵树的右子树作为合并后的右子树。

通过这三个步骤,两棵二叉树就可以完美地合并在一起。

代码示例:

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 中都有对应的代码示例,供大家参考和使用。掌握了这一算法,在解决相关问题时,将如虎添翼,事半功倍。