代码随想录算法训练营Day15|102.二叉树的层序遍历 226.翻转二叉树 101.对称二叉树

102.二叉树的层序遍历

/**
 * 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 List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();//List是接口 无法实例化 因此只能实例化ArrayList
        if(root == null) return res;
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();//用来存放待弹出的节点
        queue.offer(root);
        while(!queue.isEmpty()){
            ArrayList<Integer> resLine = new ArrayList<Integer>();//存放每一行的结果
            int len = queue.size();
            for(int i=0;i < len;i++){
                TreeNode node = queue.poll();
                resLine.add(node.val);
                if(node.left!=null) queue.offer(node.left);
                if(node.right!=null) queue.offer(node.right);
            }
            res.add(resLine);
        }
        return res;
    }
}

226.翻转二叉树

这道题目二刷,但是还是没有一次通过,出现了输出和输入完全一样的问题,先附上错误代码,而后会以图的形式对比分析错误原因:

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root==null) return null;
        swap(root.left,root.right);
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }
    public void swap(TreeNode right,TreeNode left){
        TreeNode tempNode = right;
        right = left;
        left = tempNode;
    }
}

后面参考了答案,改写了swap方法,通过:

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root==null) return null;
        swap(root);
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }
    public void swap(TreeNode node){
        TreeNode tempNode = node.left;
        node.left = node.right;
        node.right = tempNode;
    }
}

swap方法中,一个是将待翻转节点的左右节点分别传入,一个是直接将待翻转节点传入。这两者有什么区别呢?为什么前者错了?
这其实是和方法传参的机制有关,我们都知道在Java中,对象是通过引用传递的。当你将一个对象作为参数传递给方法时,实际上是传递了一个指向该对象的引用的副本
那么第一个swap方法其实是分别创建了right和left的副本传入方法中进行交换
在这里插入图片描述
进入方法,创建一个tempNode引用指向right(副本)指向的实例对象
在这里插入图片描述
然后right(副本)引用指向left(副本)指向的实例对象

在这里插入图片描述
最后,left(副本)指向tempNode指向的实例对象
在这里插入图片描述
我们可以看出,这个方法只能将left和right指针的副本进行互换,不能对本身的right和left指针互换。
而第二个swap之所以正确,是因为直接将node的副本引用传入方法中
在这里插入图片描述
在这里插入图片描述
经过交换操作,最终完成了left和right位置的真正互换。

层序遍历

一定要记住最开始要判断root==null的情况

/**
 * 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 List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();//List是接口 无法实例化 因此只能实例化ArrayList
        if(root == null) return res;
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();//用来存放待弹出的节点
        queue.offer(root);
        while(!queue.isEmpty()){
            ArrayList<Integer> resLine = new ArrayList<Integer>();//存放每一行的结果
            int len = queue.size();
            for(int i=0;i < len;i++){
                TreeNode node = queue.poll();
                resLine.add(node.val);
                if(node.left!=null) queue.offer(node.left);
                if(node.right!=null) queue.offer(node.right);
            }
            res.add(resLine);
        }
        return res;
    }
}

对称二叉树

这道题没啥好说的 直接看卡哥视频 非常清晰
只总结一句话:每一个节点需要知道自己的左右节点是否对称才可以判断以自己为根节点的子树是都对称,从叶子节点向上不断返回左右节点对称判定结果的与,最终返回到根节点,得到最终结果。

/**
 * 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 boolean isSymmetric(TreeNode root) {
        if(root == null) return false;
        return judge(root.right,root.left);

    }
    public boolean judge(TreeNode right,TreeNode left){
        if(right==null && left==null) return true;
        else if(right==null && left!=null) return false;
        else if(right!=null && left==null) return false;
        else if(right.val != left.val) return false;
        boolean out =  judge(right.right,left.left);
        boolean in =  judge(right.left,left.right);
        return out && in;
    } 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/681654.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业建设数字工厂管理系统该如何选择供应商

随着信息技术的飞速发展&#xff0c;数字化转型已成为企业提升竞争力的关键。在制造业领域&#xff0c;建设数字工厂管理系统更是实现智能化生产、优化资源配置、提高生产效率的重要途径。然而&#xff0c;面对市场上琳琅满目的数字工厂管理系统供应商&#xff0c;企业改如何选…

TCP协议的核心机制

TCP协议的核心机制 一:确认应答机制1.2:超时重传接收缓冲区 超时重传时间重置连接 一:确认应答机制 对于TCP协议来说,要解决的一个很重要的问题,就是可靠传输 可靠传输,不是指发送方能够100%的把数据发送给接收方,而是尽可能. 尤其是让发送方知道,接收方是否收到. 举个例子: …

Spring Boot 应用打 WAR 包后无法注册到 Nacos怎么办

你好&#xff0c;我是柳岸花开。 在微服务架构中&#xff0c;服务注册与发现是至关重要的一环。Nacos 作为阿里巴巴开源的注册中心&#xff0c;能够很好地满足这一需求。然而&#xff0c;在将 Spring Boot 应用打包成 WAR 部署到外部服务器时&#xff0c;可能会遇到服务无法注册…

实用软件分享---- i茅台 在windows上自动预约和自动获取小茅运的软件

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

基于JS实现《国家基本比例尺地形图分幅和编号》标准

1、标准 GB T 13989-2012国家基本比例尺地形图分幅和编号 地址&#xff1a;【高清版】GB T 13989-2012国家基本比例尺地形图分幅和编号 - 道客巴巴 2、1:100万比例尺 2.1 说明 2.2 计算公式 2.3 计算代码 2.3.1 元素数据定义 由于中国只到N层&#xff0c;所以只定义到O. …

自动控制:控制系统的灵敏度分析

自动控制&#xff1a;控制系统的灵敏度分析 引言 灵敏度问题在控制系统设计中至关重要。灵敏度衡量的是系统对参数变化和扰动的响应程度。本文将详细探讨灵敏度函数的概念&#xff0c;并推导出开环和闭环控制系统在前向路径和反馈路径元素扰动下的灵敏度表达式。 灵敏度概念…

8款监控电脑屏幕的软件排名(屏幕监控软件TOP8)

8款监控电脑屏幕的软件排名&#xff08;屏幕监控软件TOP8&#xff09; 作为企业管理者都想对企业的员工和电脑设备了如指掌&#xff0c;毕竟日防夜防家贼难防&#xff0c;利用电脑泄密者数不胜数&#xff0c;为此需要对电脑屏幕实施监控&#xff0c;小编为你推荐几个屏幕监控软…

vue3中 window绑定scroll事件滚动页面获取不到e.target.scrollTop

遇到的问题 vue3项目 onMounted(() > {window.addEventListener(scroll, (e) > {console.log(e.target.scrollTop)}) })想要监听页面中的滚动&#xff0c;然后获取滚动距离实现一些功能&#xff0c;发现event参数中获取不到e.target.scrollTop&#xff08;印象中以前使…

Java Web学习笔记2——Web开发介绍

什么是Web&#xff1f; Web&#xff1a;全球广域网&#xff0c;也称为万维网&#xff08;WWW World Wide Web&#xff09;&#xff0c;能够通过浏览器访问的网站。 1&#xff09;淘宝、京东、唯品会等电商系统&#xff1b; 2&#xff09;CRM、OA、ERP企业管理系统&#xff1…

Wi-Fi 6E vs. Wi-Fi 7: Which is the Best Fit for Your Infrastructure?

Wi-Fi 6E vs. Wi-Fi 7: Which is the Best Fit for Your Infrastructure? With the rapid advancement of wireless technology, organizations face a critical decision: should they adopt Wi-Fi 6E now or wait for Wi-Fi 7? This decision impacts various aspects of …

isp效果库相关参数——镜像翻转

前言 之前一直比较忙着接触新工作内容&#xff0c;所以有一段搁置期&#xff0c;但是工作中的知识点还是有一直记录的&#xff0c;只是没空发出来&#xff0c;毕竟需要先熟悉才能总结内容&#xff0c;接下来的几天会连着发布 不同的产品数据手册有着不同的叫法但是统一的意思离…

【成品设计】基于IAP15W4K的久坐提醒器

《基于IAP15W4K的久坐提醒器》 整体功能&#xff1a; 作品名称&#xff1a;《基于IAP15W4K61S4的久坐提醒器》 作品器件&#xff1a; 单片机&#xff1a;IAP15W4K61S4 2.人体感应模块&#xff1a; 引脚连接&#xff1a; 1.VCC&#xff1a;正极 3.3-5V供电 2.GND&#xff1a;…

为什么要选择软件开发外包?降本增效共创共赢

►开发外包是什么&#xff1f; 软件开发外包就是将企业的软件开发项目交给外部的专业团队或个人来完成&#xff0c;这些外包团队通常具备丰富的技术经验和专业的开发能力&#xff0c;能够根据企业的需求&#xff0c;提供定制化的软件开发服务。通过外包&#xff0c;企业可以节…

FarmersWorld农民世界源码开发:0撸卷轴+潮玩模式

一、引言 随着科技的发展&#xff0c;游戏产业日益壮大&#xff0c;一种新型的游戏形式——零撸游戏应运而生。本文将深入探讨FarmersWorld农民世界源码开发&#xff0c;以其独特的0撸卷轴潮玩模式&#xff0c;为玩家带来全新的游戏体验。 二、源码开发的专业性和深度 Farmer…

会声会影2024官方旗舰版最新版评测

随着数字内容创作的兴起&#xff0c;越来越多的人开始关注视频制作领域。对于初学者和专业人士来说&#xff0c;选择一款适合自己的视频编辑软件是非常重要的。今天&#xff0c;我将为大家全面而深入地评测会声会影2024最新版&#xff0c;从易用性、功能性以及性价比方面进行评…

2022.9.26DAY678

课程学习&#xff1a;《数据处理技术》讲了“数据查询”的语法格式&#xff0c;语法格式也算是简单&#xff0c;就是没能跟之前的内容联系起来&#xff0c;之前的内容没有及时回顾。 高等数学&#xff1a;“ 函数的概念”&#xff0c;讲了函数的概念&#xff0c;反函数&#…

ant-design vue3 中上传图片组件的回传图片显示问题

最近在做web端的上传图片 有一个数据列表中的编辑功能 是之前上传的图片 点击编辑进入编辑页面 会显示之前写的数据 现在需要把原来上传的图片 显示出来 因为之前给后端上传的 图片格式 是一个数组 ["图片链接"&#xff0c;“图片链接”。。。] 后端给我返回的数据也…

AI菜鸟向前飞 — LangChain系列之十六 - Agent系列:从现象看机制(下篇)一款“无需传递中间步骤“的Agent

前言 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列&#xff1a;从现象看机制&#xff08;上篇&#xff09; AI菜鸟向前飞 — LangChain系列之十五 - Agent系列&#xff1a;从现象看机制&#xff08;中篇&#xff09;一个Agent的“旅行” 回顾前两篇文章&#xff0c;大家会…

Java实现一个公共方法解析不同类型的表格

首先是公共方法 private String getCellValueAsString(Cell cell) {if (cell null) {return "";}String value "";switch (cell.getCellType()) {case STRING:value cell.getStringCellValue();break;case NUMERIC:if (DateUtil.isCellDateFormatted(ce…

D435相机结合Yolo V8识别出目标物体,并转点云出抓取位姿。

最近项目上需要完成整个识别、定位、到最后的抓取流程。 分享一下&#xff0c;通过使用D435相机并结合Yolo V8识别出目标物体后&#xff0c;抠取出目标物体部分的有效深度图&#xff0c;最后将前景物体部分的RGB D435相机结合Yolo V8识别出目标物体&#xff0c;并转点云出抓取位…