IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> leetcode227合并二叉树 -> 正文阅读

[数据结构与算法]leetcode227合并二叉树

一.题目描述

二.解决办法

1.递归

如果考虑递归,就需要知道递归的终止条件是什么?本题的终止条件是:

  • 当root1或者root2为空时,root1为空就返回root2,root2为空就返回root1
if(root1 == null)
    return root2;
if(root2 == null)
    return root1;
  • 确定了终止条件后,我的理解是进行一次进行一次合并二叉树的操作。
    class Solution {
        public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
            if(root1 == null)
                return root2;
            if(root2 == null)
                return root1;
            TreeNode root = new TreeNode(root1.val+root2.val);//节点的val值进行合并
            root.left = mergeTrees(root1.left,root2.left);//左子树进行合并
            root.right = mergeTrees(root1.right,root2.right);//右子树进行合并
            return root;
        }
    }

    2.层序遍历

? ? ? ? 使用队列来模拟层序遍历,可以将两棵树的节点放入到队列中。

  • 不新建树
class Solution{
    public TreeNode mergeTrees(TreeNode root1,TreeNode root2){
        if(root1 == null)
            return root2;
        if(root2 == null)
            return root1;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root1);
        queue.offer(root2);
        while(!queue.isEmpty()){
            TreeNode node1 = queue.peek();
            queue.poll();
            TreeNode node2 = queue.peek();
            queue.poll();
            node1.val += node2.val;

            if(node1.left != null && node2.left != null){
                queue.offer(node1.left);
                queue.offer(node2.left);   
            }
            if(node1.right != null && node2.right != null){
                queue.offer(node1.right);
                queue.offer(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;    
    }
}
  • 新建树(蛮复杂的)

取三个队列容器,构建一个新的节点,将他输入到queue,通过队列弹出poll每次更新TreeNode,即node,node1,node2.从而左右子树都会更新 。

class Solution{
    public TreeNode mergeTrees(TreeNode root1,TreeNode root2){
        if(root1 == null)
            return root2;
        if(root2 == null)
            return root1;
        TreeNode merged = new TreeNode(root1.val+root2.val);
        Queue<TreeNode> queue = new LinkedList<>();
        Queue<TreeNode> queue1 = new LinkedList<>();
        Queue<TreeNode> queue2 = new LinkedList<>();
        queue.offer(merged);
        queue1.offer(root1);
        queue2.offer(root2);
        while(!queue1.isEmpty() && !queue2.isEmpty()){
           TreeNode node = queue.poll();
           TreeNode node1 = queue.poll();
           TreeNode node2 = queue.poll();
           TreeNode left1 = node1.left;
           TreeNode left2 = node2.left; 
           TreeNode rigth1 = node1.right;
           TreeNode right2 = node2.right;
           if(left1 != null || left2 != null){
               if(left1 != null && left2 != null){
                   TreeNode left = new TreeNode(left1.val + left2.val);
                   node.left = left;
                   queue.offer(left);
                   queue1.offer(left1);
                   queue2.offer(left2);
               }
               else if(left1 != null){
                   node.left = left1;
               }
               else if(left2 != null){
                   node.left = left2;
               }
           } 
           if(right1 != null || right2 != null){
               if(right1 != null && right2 != null){
                   TreeNode right = new TreeNode(right1.val + right2.val);
                   node.right = right;
                   queue.offer(right);
                   queue1.offer(right1);
                   queue2.offer(right2);
               }
               else if(right1 != null){
                   node.right = right1;
               }
               else if(right2 != null){
                   node.right = right2;
               }
           }
        }
    }
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:27:24  更:2021-12-26 22:28:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:34:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码