合并二叉树java
时间: 2025-05-15 20:08:45 浏览: 17
### 合并二叉树的算法实现
在 Java 中实现二叉树的合并可以通过递归方法完成。以下是详细的说明以及代码示例。
#### 算法描述
当两棵二叉树被合并时,如果两个节点重叠,则将它们的值相加作为新节点的值;如果不重叠,则取非空节点作为新二叉树的一部分[^3]。此过程可以采用递归来处理每一对对应的节点。
#### 实现细节
定义一个 `TreeNode` 类表示二叉树中的节点,并编写一个函数用于合并两棵二叉树。该函数接收两个根节点作为参数,返回一个新的根节点代表合并后的二叉树。
#### 示例代码
以下是一个完整的 Java 实现:
```java
// 定义二叉树节点类
class TreeNode {
int val;
TreeNode left, right;
TreeNode(int x) {
val = x;
}
}
public class MergeBinaryTrees {
// 主要逻辑:合并两棵二叉树
public static TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
if (t1 == null) return t2; // 如果 t1 为空,直接返回 t2
if (t2 == null) return t1; // 如果 t2 为空,直接返回 t1
// 当前节点值为两者之和
t1.val += t2.val;
// 递归合并左子树和右子树
t1.left = mergeTrees(t1.left, t2.left);
t1.right = mergeTrees(t1.right, t2.right);
return t1; // 返回修改后的 t1 树
}
// 测试用例
public static void main(String[] args) {
// 构建第一棵树 t1
TreeNode t1 = new TreeNode(1);
t1.left = new TreeNode(3);
t1.right = new TreeNode(2);
t1.left.left = new TreeNode(5);
// 构建第二棵树 t2
TreeNode t2 = new TreeNode(2);
t2.left = new TreeNode(1);
t2.right = new TreeNode(3);
t2.left.right = new TreeNode(4);
t2.right.right = new TreeNode(7);
// 调用合并函数
TreeNode mergedTree = mergeTrees(t1, t2);
// 打印结果(这里仅展示部分打印方式)
System.out.println("Merged Tree Root Value: " + mergedTree.val); // 输出应为 3
}
}
```
上述代码通过递归的方式实现了二叉树的合并操作。对于每一层的节点,分别判断其是否存在,进而决定如何更新当前节点及其子节点[^1]。
---
#### 复杂度分析
- **时间复杂度**: O(min(m, n)),其中 m 和 n 是两棵树的节点数。因为每次只访问对应位置上的节点一次。
- **空间复杂度**: O(min(h₁, h₂)),取决于递归栈的最大深度,h₁ 和 h₂ 分别是两棵树的高度。
---
阅读全文
相关推荐


















