代码随想录-59-617.合并二叉树

前言

我正在刷卡哥的“代码随想录”,自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。
代码随想录此题链接

题目

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始

在这里插入图片描述
在这里插入图片描述

1.同时递归两棵二叉树(前序递归)

遍历两棵二叉树,如果第一棵二叉树的当前节点为空则返回第二棵二叉树的节点,反之则返回第一课的二叉树结点;
若两棵二叉树当前节点的都不为空则创建一个新的节点,节点的值为当前两棵二叉树当前的节点值之和。
新节点的左孩子分别递归两棵树当前节点的左孩子,
新节点的右孩子分别递归两棵树当前节点的右孩子,

2. 本题思路分析:

此题可以使用递归遍历,
三部曲:

  • 第一步确定参数和返回值
    参数:两棵二叉树的节点
    返回值:当前节点
  • 第二步截止递归的条件
    当前第一棵树当前节点为空,返回第二棵树的当前节点,若第二棵树当前节点为空(此时第一棵树的节点不为空了)则返回第一棵树的当前节点。
  • 第三步单层递归逻辑
    将两棵树的当前节点之和相加,赋值给新建的树节点;
    然后分别递归左右孩子节点分别给此新节点的左右孩子。

3. 算法实现

public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
  //前序遍历
    if(root1 == null){
        return root2;
    }else if(root2 == null){
        return root1;
    }
    TreeNode cur = new TreeNode(root1.val + root2.val);
    cur.left = mergeTrees(root1.left,root2.left);
    cur.right = mergeTrees(root1.right,root2.right);
    return cur;
}

4. 算法复杂度

暂无

5. 算法坑点

暂无

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值