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

目录

  • 前言
    • 题目
    • 1.同时递归两棵二叉树(前序递归)
    • 2. 本题思路分析:
    • 3. 算法实现
    • 4. 算法复杂度
    • 5. 算法坑点

前言

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

题目

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

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

返回合并后的二叉树。

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

代码随想录-59-617.合并二叉树_第1张图片
代码随想录-59-617.合并二叉树_第2张图片

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. 算法坑点

暂无

你可能感兴趣的:(算法,数据结构)