合并二叉树

题目:已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。

题解如下图:

本题采用递归的方法来实现(c++)

其Java代码如下(将t2合并到t1上)

 

### 合并二叉树的算法实现 在 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₂ 分别是两棵树的高度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值