首页 > 其他分享 >代码随想录Day30

代码随想录Day30

时间:2022-11-25 00:55:58浏览次数:64  
标签:node2 代码 随想录 Day30 right node1 null root1 left

LeetCode617  合并二叉树

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

示例 1:

 

 

 思路:

同时遍历两个树就可以做到合并二叉树。

参数传入两个根节点,同步进行遍历。

如果tree1为null,返回t2的值,反之亦然。

可以采用前序遍历的方式来做。如果两个树对应节点的值都不为空的情况下,相加求值。

最后递归的方式进行左和右的递归方法调用。

 

代码:

class Solution {
    // 递归
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if (root1 == null) return root2;
        if (root2 == null) return root1;

        root1.val += root2.val;
        root1.left = mergeTrees(root1.left,root2.left);
        root1.right = mergeTrees(root1.right,root2.right);
        return root1;
    }
}
class Solution {
    // 使用栈迭代
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if (root1 == null) {
            return root2;
        }
        if (root2 == null) {
            return root1;
        }
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root2);
        stack.push(root1);
        while (!stack.isEmpty()) {
            TreeNode node1 = stack.pop();
            TreeNode node2 = stack.pop();
            node1.val += node2.val;
            if (node2.right != null && node1.right != null) {
                stack.push(node2.right);
                stack.push(node1.right);
            } else {
                if (node1.right == null) {
                    node1.right = node2.right;
                }
            }
            if (node2.left != null && node1.left != null) {
                stack.push(node2.left);
                stack.push(node1.left);
            } else {
                if (node1.left == null) {
                    node1.left = node2.left;
                }
            }
        }
        return root1;
    }
}
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.poll();
            TreeNode node2 = queue.poll();
            // 此时两个节点一定不为空,val相加
            node1.val = 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);
            }
            // 若node1的左节点为空,直接赋值
            if (node1.left == null && node2.left != null) {
                node1.left = node2.left;
            }
            // 若node2的左节点为空,直接赋值
            if (node1.right == null && node2.right != null) {
                node1.right = node2.right;
            }
        }
        return root1;
    }
}

 

标签:node2,代码,随想录,Day30,right,node1,null,root1,left
From: https://www.cnblogs.com/dwj-ngu/p/16923960.html

相关文章

  • 不小心把代码写在了 tracer-ysyx2204 下,怎么办?
    2.遇到个问题,不小心把代码写在ysyx-tracer分支了,想办法迁移回pa3分支:2.1.使用gitreset--soft切换到ysyx-tracer的某个提交,这个提交的事件和pa3分支上一次......
  • 关于代码添加ui控件代码修改recttransform的问题探索
    问题起因:我通过代码添加了预制体发现位置不对,看不见了,通过检查器看到x和y为-115,-351,发现修改pos没有任何作用U7JZ{0~OM61W`J_5M7DKVC3.png但是发现并没有......
  • 我们写代码注意一点点
     优化点一Render函数最好直接用jsx函数组建<Viewstyle={{flex:1,backgroundColor:'#F4F5FA'}}><TitLe><View/>优化点二函数最好不要超过1......
  • Notepad++高亮smali代码的办法
    https://note.youdao.com/s/8TXfC3C2C:\Users\Administrator\AppData\Roaming\Notepad++前面介绍了一些​​工具​​可以反编译dex文件为smali文件,在Android程序逆向分析中......
  • /mirrors_os/ubuntu-releases/[附更新源的代码]
    点击查看代码sudocp/etc/apt/sources.list/etc/apt/sources.list.baksudosed-i"s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g"/etc/apt/source......
  • 代码生成器
    根据数据库中的字段数据自动生成代码,如下:1.添加依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><ve......
  • springboot+vue+element-ui实现文件上传前后台代码+文件上传后台工具类
    //新增模板接口@PreAuthorize("@ss.hasPermi('pshdhx:template:add')")@Log(title="template",businessType=BusinessType.INSERT)@PostMapping("add")@ResponseBodypublic......
  • 后台管理增删查改统一性代码--若依前后端分离版本
    controller:@PreAuthorize("@ss.hasPermi('system:role:list')")//和数据库中的menu中的字段有关系@GetMapping("list")publicTableDataInfolist(SysRolerole){start......
  • 想要做好代码质量,如何破局?
    作者:苗现方想要做好代码质量,我们不得不提什么是代码质量?本文中讨论的代码质量一般是指代码的风格、重复率和复杂度等,代码是技术团队的价值产物,是宝贵的财富,同样代码质量的......
  • pat 并查集题目代码详解
    不得不吐槽并查集的题太少了1118:1//一道并查集查询的题目2//需要注意的几个点3//输入的时候在进行合并时,是一个一个输入的,所以需要引入一个变量来存储前一个输......