力扣-617-合并二叉树-javaScript实现

一:题意分析

         本题主要是一起操作两个二叉树 其实和之前写过的那个对称二叉树差不多,只不过对称二叉树是操作根节点的左右子树 也是操作两颗树 而这道题就很直接指出来操作的是 两颗独立的二叉树 遍历的时候 是两颗树一起遍历的

        刚开始会有点懵 但是仔细想想 不还就是递归嘛 确定递归的三要素即可。这里介绍两种方法(递归法和迭代法

二:递归解法

var mergeTrees = function(root1, root2) {
    // 确定递归的终止条件
    if(root1.value === null)return root2;
    if(root2.value === null)return root1;

    root1.value += root2.value; // 中

    //递归的单层逻辑
    root1.left = mergeTrees(root1.left,root2.left); // 左
    root1.right = mergeTrees(root1.right,root2.right); // 右

    return root1;
};

        递归总结:这道题其实不管前序遍历 中序遍历还是后序遍历都是可以的,只不过前序遍历会更加符合我们处理这颗二叉树的正常逻辑。

三:迭代法

// 迭代法
var mergeTrees = function(root1, root2){
    //判断终止条件
    if(root1 === null)return root2;
    if(root2 === null)return root1;

    let queue = []  // 定义一个队列 用来存放二叉树每一层的节点
    queue.push(root1);
    queue.push(root2);
    while(queue.length){
        let node1 = queue.shift();
        let node2 = queue.shift();
        node1.val += node2.val; //  把每一层对应位置的值想加。
        
        // 判断特殊情况
        if(node1.left !== null && node2.left !== null){
            // 说明两棵树对应的节点的左子树都有值
            queue.push(node1.left);
            queue.push(node2.left);
        }
        if(node1.right !== null && node2.right !== null){
            // 说明两棵树对应的节点的左子树都有值
            queue.push(node1.right);
            queue.push(node2.right);
        }

        if(node1.left === null && node2.left !== null){
            // 如果第一棵树的左子树没有值的话 那么就把第二棵树的左子树赋值给第一棵树的左子树
            node1.left = node2.left
        }

        if(node1.right === null && node2.right !== null){
            // 同理
            node1.right = node2.right
        }
    }
    return root1;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值