「刷题」二叉树的题刷不动?快进来拓展解题思路!

🎇个人主页:Ice_Sugar_7
🎇所属专栏:数据结构刷题
🎇欢迎点赞收藏加关注哦!

题单

  • 🍉对称二叉树
  • 🍉层序遍历二叉树
  • 🍉由前序、中序遍历构造二叉树

🍉对称二叉树

题目链接

思路:现在有两个节点root1、root2,它们有共同的根节点,如果root1的左子树、右子树分别和root2的右子树、左子树相同,那就是对称的
需要注意的是,题干给的方法只有一个参数root,但是我们要两边同时走,也就需要两个参数,所以需要额外写一个方法

    public boolean isSymmetric(TreeNode root) {if(root == null) {return true;}return Symmetric(root.left,root.right);}public boolean Symmetric(TreeNode root1,TreeNode root2) {//整体思路是前序遍历,先对根节点进行判断if(root1 == null && root2 == null) {return true;}//到这里,root1和root2至少有一个不为空,接下来判断有没有一个是空的,若有,那就不是对称的了if(root1 == null || root2 == null) {return false;}//到这里,root1和root2都不为空//比较根节点的值if(root1.val != root2.val) {return false;} else {//从else开始就是遍历根节点的左子树和右子树boolean ret1 = Symmetric(root1.left,root2.right);boolean ret2 = Symmetric(root1.right,root2.left);if(ret1 && ret2) {return true;} else {return false;}}}

🍉层序遍历二叉树

题目链接

思路:用队列存储二叉树每一层的元素,定义一个变量size记录入队后队列的元素个数,也就是二叉树每一层的元素个数
为什么要记录呢?因为我们需要弹出这一层的节点,然后“带”出下一层的节点的,要知道弹出多少个节点

class Solution {Queue<TreeNode> queue = new LinkedList<>();public List<List<Integer>> levelOrder(TreeNode root) {if(root == null)return new ArrayList<>();List<List<Integer>> ret = new ArrayList<>();queue.offer(root);while(!queue.isEmpty()) {List<Integer> list = new ArrayList<>();int size = queue.size();//这个循环实现:将第k层的元素出队列,让第k+1层元素入队while(size-- > 0) {TreeNode top = queue.poll();  //取当前队头的元素list.add(top.val);  //每取出一个,就放到list里面if(top.left != null)queue.offer(top.left);if(top.right != null)queue.offer(top.right);}ret.add(list); //将list放进ret,相当于将一维数组放进二维数组}return ret;}
}

🍉由前序、中序遍历构造二叉树

题目链接

思路:根据前序遍历推出根节点,然后找出根节点在中序遍历数组中的位置,这样就能知道剩下的节点是在左子树还是右子树
在这里插入图片描述
在这里插入图片描述
以上图为例,由中序遍历的数组可知,20在以3为根节点的右子树,而在preorder中,20是右子树部分第一个数,说明它是这个右子树的根节点
(这里解释一下原因:因为前序遍历是按照根、左、右的顺序遍历的,所以遇到的第一个节点就是根节点)

以3为根节点分割好之后,继续对左右子树进行分割:先找出子树根节点在中序数组的位置,然后分割为更小的区间

class Solution {public int prei; //记录遍历到前序数组的哪个下标public TreeNode buildTree(int[] preorder, int[] inorder) {return devide(preorder,inorder,0,inorder.length - 1);}//val:要找的根节点的值public int findIndex(int val,int[] inorder) {for(int i = 0;i < inorder.length;i++) {if(inorder[i] == val) {return i;  //返回它在inorder中的下标}}return -1;}//begin、end:子树的起始、终止下标public TreeNode devide(int[] preorder,int[] inorder,int begin,int end) {//当end < begin时递归结束,注意end == begin时也要进行递归,此时也要创建节点if(end < begin)return null;//从中序遍历数组中找到“分割点”int dev = findIndex(preorder[prei++],inorder);  //dev:分割点在inorder中的下标//分割点就是根节点TreeNode node = new TreeNode(inorder[dev]);//通过递归连接左右子树node.left = devide(preorder,inorder,begin,dev-1);node.right = devide(preorder,inorder,dev+1,end);return node;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

three.js 向量方向(归一化.normalize)

效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div><p><el-button type"primary…

代码随想录算法训练营29期|day42 任务以及具体任务

第九章 动态规划part04 01背包问题&#xff0c;你该了解这些&#xff01; 动态规划&#xff1a;01背包理论基础 本题力扣上没有原题&#xff0c;大家可以去卡码网第46题 (opens new window)去练习&#xff0c;题意是一样的。 #算法公开课 《代码随想录》算法视频公开课 (opens…

C语言数组练习以及场景练习题

写了那么久的知识点梳理&#xff0c;今天来写点自己觉得不错的练习题来分享&#xff0c;顺便来巩固自己的知识点&#xff0c;和加强题型的解决方法的记忆。今天给大家带来的有数组的找数字题目&#xff0c;以及场景找凶手的题目&#xff0c;下面让我们来看看今天的第一道题目。…

Linux进程信号处理:深入理解与应用(3)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;its 6pm but I miss u already.—bbbluelee 0:01━━━━━━️&#x1f49f;──────── 3:18 &#x1f504; ◀️…

CSDN2024年我的创作纪念日1024天|不忘初心|努力上进|积极向前

CSDN2024年我的创作纪念日1024天| 学习成长机遇&#xff1a;学习成长收获&#xff1a;2023年度总结数据&#xff1a;2024新领域的探索&#xff1a;日常和自己的感慨&#xff1a;2024憧憬和规划&#xff1a;创作纪念日总结&#xff1a; 学习成长机遇&#xff1a; 大家好&#x…

QT安装与helloworld

文章目录 QT安装与helloworld1.概念&#xff1a;2.安装QT3.配置环境变量4.创建项目5.运行效果 QT安装与helloworld 1.概念&#xff1a; Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处&#xff1a;提供首个专为支持跨平台开发而设计的…

Figma怎么设置中文,Figma有中文版吗?

不是很多人不想用 Figma&#xff0c;真是因为纯英文界面而头疼。这就是为什么有人会到处搜索 Figma 如何设置中文这样的问题。 然后我们直接快刀斩乱麻&#xff0c;Figma 没有中文版&#xff0c;但是我们还有其他的方法&#xff1a;例如&#xff0c; Figma 添加一个插件来解决…

2024年考PMP还有什么用?

PMP 是项目管理专业人士资格认证的意思&#xff0c;也是项目管理领域通用的证书&#xff0c; 做项目的基本都会去考。 要说 PMP 有啥作用&#xff1f; 个人感觉 PMP 证书更多的是跳槽、转行的敲门砖的作用&#xff0c;因为现在很多公司都要 PMP 证书&#xff0c;有了可以加分…

axios下载文件打开失败解决

在axios的then中创建了a标签下载文件完成之后&#xff0c;发现下载的文件打不开。 解决方法 设置responseType: blob 注意&#xff01;&#xff01;&#xff01;这个是和headers同级别的&#xff0c;不是在headers里面的

2024最新msvcp140.dll丢失的解决方法,总结5种有效的方法

msvcp140.dll文件的丢失可能会引发一系列潜在问题并对计算机系统产生多方面的影响。首先&#xff0c;这个文件是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows的应用程序运行至关重要。一旦丢失&#xff0c;可能会导致部分软件无法正常启…

NLP_词的向量表示Word2Vec 和 Embedding

文章目录 词向量Word2Vec&#xff1a;CBOW模型和Skip-Gram模型通过nn.Embedding来实现词嵌入Word2Vec小结 词向量 下面这张图就形象地呈现了词向量的内涵:把词转化为向量&#xff0c;从而捕捉词与词之间的语义和句法关系&#xff0c;使得具有相似含义或相关性的词语在向量空间…

简单的TcpServer(英译中)

目录 一、TCP socket API 详解1.1 socket()1.2 bind()1.3 listen()1.4 accept()1.5 connect 二、TcpServer&#xff08;英译中&#xff09;2.1 TcpServer.hpp2.2 TcpClient.cc2.3 Task.hpp2.4 Thread.hpp2.5 ThreadPool.hpp2.6 makefile2.7 Main.cc2.8 log.hpp2.9 Init.hpp2.10…