题目:617.合并二叉树

题目来源:

        leetcode题目,网址:617. 合并二叉树 - 力扣(LeetCode)

解题思路:

        同时遍历两颗二叉树,按要求操作即可。

解题代码:

//覆盖添加

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if(root2==null){        
            return root1;
        }
        if(root1==null){
            root1=new TreeNode();
        }
        root1.val+=root2.val;
        if(root1.left==null && root2.left!=null){
            root1.left=root2.left;
        }else{
            mergeTrees(root1.left,root2.left);
        }
        if(root1.right==null && root2.right!=null){
            root1.right=root2.right;
        }else{
            mergeTrees(root1.right,root2.right);
        }
        return root1;
    }
    
}
//合并为一颗新树

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        TreeNode res;
        if(root1==null && root2==null){
            return root1;
        }
        res=new TreeNode();
        assistMergeTrees(res,root1,root2);
        return res;
    }
    public void assistMergeTrees(TreeNode res,TreeNode root1,TreeNode root2){
        int val=0;
        if(root1!=null)
            val+=root1.val;
        if(root2!=null)
            val+=root2.val;
        res.val=val;


        if((root1!=null &&root1.left!=null) || (root2!=null&& root2.left!=null)){
            res.left=new TreeNode();
            TreeNode root1Left= root1==null? null:root1.left;
            TreeNode root2Left= root2==null?null:root2.left;
            assistMergeTrees(res.left,root1Left,root2Left);
        }else
            res.left=null;
        if((root1!=null &&root1.right!=null) || (root2!=null&&root2.right!=null)){
            res.right=new TreeNode();
            TreeNode root1Right= root1==null?null:root1.right;
            TreeNode root2Right= root2==null?null:root2.right;
            assistMergeTrees(res.right,root1Right,root2Right);
        }else   
            res.right=null;
    }
}
 

总结:

        写完代码才发现题目要求将一棵树覆盖在另一棵树上,重写了代码。

        官方题解给出了深度优先和广度优先两种解法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值