当前位置:网站首页>leetcode二叉树系列(一)
leetcode二叉树系列(一)
2022-08-04 09:03:00 【你食不食油饼】
目录
1、对称二叉树
题目描述:
思路:要判断二叉树是否是对称二叉树,对称二叉树的条件大家得看清 是要root.left.right = root.right.left,我开始就吃了亏,没审清题,以为是要左节点等于左节点,右节点等于右节点;
这道题比较简单,我们直接进入代码:
public boolean isSymmetric(TreeNode root) {
return dfs(root.left,root.right);
}
public boolean dfs(TreeNode left,TreeNode right){
if(left == null && right == null) return true;
if(left == null || right == null) return false;
if( left.val != right.val) return false;
return (dfs(left.left,right.right) && dfs(left.right,right.left));
}
2、二叉树的层序遍历
题目描述:
思路:层序遍历就是遍历二叉树时,从第一层依次遍历到第二层再到第三层,与我们往常的前序、中序、后序遍历不同;
BFS(广度优先遍历),就是专门用于进行层序遍历的搜索算法,所以这道题我们会采用bfs来进行二叉树的层序遍历
代码如下:
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> lists = new ArrayList<>();
if (root == null) return lists;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){
//size为每一层节点的个数
int size = queue.size();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
list.add(node.val);
if (node.left != null) queue.offer(node.left);
if (node.right != null) queue.offer(node.right);
}
lists.add(list);
}
return lists;
}
3、二叉树的最大深度
题目描述:
思路:就是做一个递归操作,很简单,直接看代码
public int maxDepth(TreeNode root) {
if(root == null) return 0;
return Math.max(root.left == null ? 0 : maxDepth(root.left),
root.right == null ? 0 : maxDepth(root.right)) + 1;
}
4、从前序和中序遍历构造二叉树
题目描述:
思路: 前序遍历数组[3,9,20,15,7],中序遍历数组[9,3,15,20,7],进行递归操作
第一次递归,建立val为3的节点root,我们找到它在中序遍历数组中出现的位置,
root.left =[9],root.right = [20,15,7]
第二次递归,建立val为9的节点root,此时回退,返回root;
第三次递归,建立val为20的节点root,我们依然找到它在中序遍历数组出现的位置,
root.left = [15],root.right = [7]
第四次递归,建立val为15的节点root,此时回退,返回root;
第五次递归,建立val为7的节点root,此时回退,返回root;
第五次递归结束时,此时回退完成后,二叉树就已经建立完毕
至于我们判断回退的条件,我们可以递归参数中加入preStart、preEnd表示在前序数组中的开始索引位置和结束索引位置,当preStart == preEnd时,退出此次递归;
进入代码:
public TreeNode buildTree(int[] preorder, int[] inorder) {
LinkedHashMap<Integer,Integer> map = new LinkedHashMap<>();
return build(preorder,0,preorder.length,inorder,0,inorder.length);
}
public TreeNode build(int[] preorder,int preStart,int preEnd,int[] inorder,int inStart,int inEnd){
if(preStart == preEnd) return null;
int rootVal = preorder[preStart];
//每一个节点都是他子节点的主节点
TreeNode root = new TreeNode(rootVal);
int index = inStart;
for(;index < inEnd;index++){
if(rootVal == inorder[index])
break;
}
//移动了多少个位置才到达主节点
int leftnum = index - inStart;
root.left = build(preorder,preStart+1,preStart+leftnum+1,inorder,inStart,index);
root.right = build(preorder,preStart+leftnum+1,preEnd,inorder,index+1,inEnd);
return root;
}
持续更新中~~
边栏推荐
- 下午14:00面试,14:08低着头出来了 ,问的实在是太...
- 蜜芽CEO刘楠:垂直电商黄金时代已落幕 坚定转型品牌之路
- telnet远程登录aaa模式详解【华为eNSP】
- How many assertion methods are commonly used in JMeter?
- 【云驻共创】HCSD 大咖直播–就业指南
- No module named 'flask_misaka' has been resolved [BUG solution]
- VRRP+MSTP配置详解【华为eNSP实验】
- GBsae 8c 数据库使用中报错,肿么办?
- Anton Paar安东帕密度计比重计维修DMA35性能参数
- LVGL的多语言转换工具--字体设置的好助手
猜你喜欢
智汇华云 | 华云软件定义网络 DCI介绍
技术实现 | 图像检索及其在高德的应用
预测性维护学习之路
binder通信实现
No module named 'flask_misaka' has been resolved [BUG solution]
基于cRIO-904X搭建Simulink与Labview环境
【正点原子STM32连载】第二章 STM32简介 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
【云驻共创】HCSD 大咖直播–就业指南
蜜芽CEO刘楠:垂直电商黄金时代已落幕 坚定转型品牌之路
TiFlash 源码阅读(五) DeltaTree 存储引擎设计及实现分析 - Part 2
随机推荐
基于cRIO-904X搭建Simulink与Labview环境
Convert callback function to Flow
I am 37 this year, and I was rushed by a big factory to...
一道[CSCCTF 2019 Qual]FlaskLight的详解再遇SSTI
【论文笔记】Understanding Long Programming Languages with Structure-Aware Sparse Attention
2022年化工自动化控制仪表考试模拟100题及模拟考试
2022年制冷与空调设备运行操作特种作业证考试题库及模拟考试
B站回应HR称“核心用户都是Loser”、求职者是“白嫖党”:已被劝退
The difference between character stream and byte stream
获取cpu的核数
Apache Druid 实时分析数据库入门介绍
蘑菇书EasyRL学习笔记
【论文笔记】Delving into the Estimation Shift of Batch Normalization in a Network
三层交换机/路由器OSPF配置详解【华为eNSP实验】
字符串与正则表达式(C#)
Explanation of spark operator
js - the first letter that appears twice
94后字节P7晒出工资单:狠补了这个,真不错...
[Punctuality Atom STM32 Serial] Chapter 4 STM32 First Experience Excerpted from [Punctual Atom] MiniPro STM32H750 Development Guide_V1.1
How many assertion methods are commonly used in JMeter?