LeetCode之合并二叉树

合并二叉树

1. 题目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mXzTI8fr-1608310592446)(C:\Users\caoxin\AppData\Roaming\Typora\typora-user-images\image-20201217000949536.png)]

2. 解题思路

采用递归和后序遍历的方式来同时遍历两棵树。遍历的同时,一定要判断两颗树的当前节点是否为空。然后创建一个新的节点,节点值为两个节点之和。遍历完成后即可得到合并后的树。

3. 解题步骤

  1. 判断当前两颗树的节点全为空,如果为空则返回空。

  2. 反之有以下三种

    • 可能两个节点都不为空
    • 左节点为空,右节点不为空
    • 右节点为空,左节点不为空
  3. 采取以下措施

    • 当为第一种情况时 ,创建一个新的节点,节点值为左右节点值的和,之后遍历左右节点
    • 当为第二种情况时 ,创建一个新的节点,节点值为右节点值,之后遍历右节点.
    • 当为第三种情况时 ,创建一个新的节点,节点值为左节点值,之后遍历左节点。
  4. 返回创建的新的节点。

4. 代码

class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        if(t1==null&&t2==null){
            return null;
        }else{
            TreeNode t3;
            if(t1!=null&&t2!=null){
                t3=new TreeNode(t1.val+t2.val);
                t3.right=mergeTrees(t1.right,t2.right);
                t3.left=mergeTrees(t1.left,t2.left);
            }else if(t1!=null){
                t3=new TreeNode(t1.val);
                t3.right=mergeTrees(t1.right,null);
                t3.left=mergeTrees(t1.left,null);
            }else{
                t3=new TreeNode(t2.val);
                t3.right=mergeTrees(null,t2.right);
                t3.left=mergeTrees(null,t2.left);
            }
            return t3;
        }
    }
}

5. 总结

以目前我做的与树相关的题目来说。所需要做的事基本上就是一件事:遍历。而树的遍历一般可以通过递归的方式来进行一些简单的遍历。遍历一般分为三种:前序遍历、中序遍历、后序遍历。前序、中序、后序的名字是按照遍历中父节点,相对于左右子节点中的顺序。如果父节点,在其子父节点中最后一个遍历,称之为后序遍历。其他的遍历顺序可由以上类推。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值