【算法第十二天7.26】二叉树层序遍历,翻转二叉树,对称二叉树

news/2025/3/20 3:24:54/

链接力扣102-层序遍历

链接力扣102-层序遍历

思路
1、需要一个队列,当一个队列出队时,将其的孩子结点全部入队;
2、每一层的结点数如何找到:比如,第一层root进入队列后,得到len = queue.size(),就循环让其出队的同时,入队其孩子,等到这一层出队完了,其孩子结点也入队完了,再次得到len,就可以确定每层的结点数。

代码

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();// 创建暂存集合不应在这里创建,应该在循环内,这样每次循环都会有一个新的tmp集合// List<Integer> tmp = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();if(root == null) return res;queue.offer(root);while(!queue.isEmpty()){int len = queue.size();// 每次循环都会有一个新的tmp集合List<Integer> tmp = new ArrayList<>();// while(len > 0){for(int i = 0; i < len; i++){TreeNode node = queue.poll();tmp.add(node.val);if(node.left != null) queue.offer(node.left);if(node.right != null) queue.offer(node.right);// len--;}res.add(tmp);}return res;}
}

链接力扣226-翻转二叉树

思路

非递归

与层序遍历类似,但是需要对每个出栈元素进行处理:交换其左右孩子

class Solution {public TreeNode invertTree(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();if(root == null) return root;queue.offer(root);while(!queue.isEmpty()){int len = queue.size();while(len > 0){TreeNode node = queue.poll();// 每一个出队的结点,都要swap一下swap(node);if(node.left != null) queue.offer(node.left);if(node.right != null) queue.offer(node.right);len--;}   }return root;}public void swap(TreeNode root){TreeNode node = root.left;root.left = root.right;root.right = node;}
}

递归

 class Solution{public TreeNode invertTree(TreeNode root) {if (root == null) return root;// swapChildren(root);// 左孩子的左右孩子交换,右孩子的左右孩子交换invertTree(root.left);invertTree(root.right);// 再交换root的左右孩子swapChildren(root);// 此时,左右孩子的孩子已经交换了,root的左右孩子也交换了,可以返回了return root;}private void swapChildren(TreeNode root) {TreeNode tmp = root.left;root.left = root.right;root.right = tmp;}}

链接力扣101-对称二叉树

思路
1、要比较的是两个节点;

2、两个节点只要某一个为空或者两个值不等,则不对称

3、节点的入队顺序:相比较的节点要挨着入队

左节点的左孩子 右节点的右孩子
左节点的右孩子 右节点的左孩子

非递归

class Solution {public boolean isSymmetric(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();queue.offer(root.left);queue.offer(root.right);while(!queue.isEmpty()){TreeNode leftnode = queue.poll();TreeNode rightnode = queue.poll();// 这里的continue:继续下两个结点的弹出,再进行循环比较if(leftnode == null && rightnode == null) continue;if(leftnode == null || rightnode == null || leftnode.val != rightnode.val){return false;} // 进队顺序://左节点的左孩子====右节点的右孩子// 左节点的右孩子=====右节点的左孩子queue.offer(leftnode.left);queue.offer(rightnode.right);queue.offer(leftnode.right);queue.offer(rightnode.left);}return true;}
}

递归

class Solution {public boolean isSymmetric(TreeNode root){// 1、参数和返回值不需要确认,题目已给出// 2、递归终止条件return symmetric(root.left,root.right);}public boolean symmetric(TreeNode left,TreeNode right){// 终止条件在这里if(right == null && left == null) return true;//这里一个细节:必须先比较是否为空,再比较值if((left == null && right != null) ||(right == null && left != null)||left.val != right.val ) return false;// 两节点的孩子节点比较在这里return symmetric(left.left,right.right) && symmetric(left.right,right.left);}
}

http://www.ppmy.cn/news/980979.html

相关文章

Docker Compose 解析:定义和管理多容器应用,从多角度探索其优势和应用场景

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

技术笔记2023076 rBoot学习7

技术笔记2023076 rBoot学习7 继续之前的学习。 代码分析&#xff1a;函数find_image() // prevent this function being placed inline with main // to keep mains stack size as small as possible // dont mark as static or itll be optimised out when // using the ass…

etcd入门和常用操作

概述 etcd 是一个高可用的分布式键值&#xff08;key-value&#xff09;数据库&#xff0c;采用了更为简洁的Raft共识算法来实现数据强一致。基于Go语言实现&#xff0c;主要用于共享配置和服务发现。 名称说明 名称说明etcd一种基于 raft 协议的分布式 kv 数据库&#xff0…

[小尘送书-第二期]《从零开始读懂量子力学》由浅入深,解释科学原理;从手机到超导,量子无处不在;从微观到宏观,遐想人生的意义!

大家好&#xff0c;我是小尘&#xff0c;欢迎关注&#xff0c;一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; 本文目录 一、前言二、作者简介三、内容简介四、抽奖方式五、名家推介写在最后 一、前…

C#事件学习笔记

一.事件概述&#xff1a; 事件的作用是降低模块间的耦合度&#xff0c;本质是观察者模式的应用&#xff0c;通过增加监听器&#xff0c;使事件响应函数的调用分散在各个对象自身内部&#xff0c;当增加和减少一个事件响应函数时&#xff0c;只需要增加或删除相应对象内的代码&…

科大讯飞-旋转机械故障诊断挑战赛2023-测试【1】

引言 旋转机械故障诊断挑战赛是一项旨在提高旋转机械故障检测和识别能力的竞赛活动。旋转机械是工业生产中广泛应用的设备&#xff0c;其运行状态直接影响着生产效率和安全性。然而&#xff0c;由于各种原因&#xff0c;旋转机械可能会出现不同类型的故障&#xff0c;如轴承损坏…

spring数据校验

数据校验 概述 在开发中&#xff0c;会存在参数校验的情况&#xff0c;如&#xff1a;注册时&#xff0c;校验用户名不能为空、用户名长度不超过20个字符&#xff0c;手机号格式合法等。如果使用普通方式&#xff0c;会将校验代码和处理逻辑耦合在一起&#xff0c;在需要新增一…

2023杭电多校第三场 1012.Noblesse Code

传送门:Vjudge 前题提要:一道挺有意思的数论题.赛时对于这道题没什么想法,但是赛后细品之后其实感觉也就那么一回事.但是这种 更相损减术与辗转相除法 相转化的题目还是有点典的,需要好好消化一下. 首先看完题目.我们需要考虑的是 ( A , B ) (A,B) (A,B)与 ( a , b ) (a,b) (…