算法通关村第8关【白银】| 二叉树的深度和高度问题

news/2024/11/25 15:27:04/

1.最大深度问题

思路:递归三部曲

第一步:确定参数和返回值

题目要求求二叉树的深度,也就是有多少层,需要传递一个root从底层向上统计

 int maxDepth(TreeNode root)

第二步:确定终止条件

当递归到null时就说明到底了,返回0

第三步:确定单层逻辑 

一个结点的深度=max(左,右)+1

class Solution {public int maxDepth(TreeNode root) {if( root== null){return 0;}int left = maxDepth(root.left);int right = maxDepth(root.right);return 1+Math.max(left,right);}
}

2.判断平衡二叉树

 思路:递归三部曲

第一步:确定参数和返回值

从底向上统计结点高度,int trace(TreeNode root)

第二步:确定终止条件

当递归到空代表触底,当左右结点高度差大于1代表失败直接一路返回-1

否则就是继续向下

第三步:确定单层逻辑

判断有无不平衡现象出现,若无往上返回一层将结点高度+1

class Solution {public boolean isBalanced(TreeNode root) {return trace(root)>-1;}public int trace(TreeNode root){if(root == null){return 0;}int left = trace(root.left);int right = trace(root.right);if(left == -1 || right == -1 || Math.abs(left - right)>1){return -1;}return 1+Math.max(left,right);}
}

3.最小深度

思路:递归三部曲

第一步:确定参数和返回值

还是需要遍历结点求深度,需要传入结点返回深度值

int trace(TreeNode root)

第二步:确定终止条件

当遍历到空时就返回0

第三步: 确定单层逻辑

需要注意的是根结点深度为1但不能算到最小深度,如果直接返回1+Min(左,右)就不符合条件

这样就需要避免根结点某一孩子为空情况

  • 左结点为空右结点不为空时,返回右结点深度+1
  • 右结点为空左结点不为空时,返回左结点深度+1
  • 如果都不为空就返回1+Min(左,右)
class Solution {public int minDepth(TreeNode root) {return trace(root);}public int trace(TreeNode root){if(root == null){return 0;}int left = trace(root.left);int right = trace(root.right);if(root.left==null){return right+1;}if(root.right==null){return left + 1;}return 1+Math.min(left,right);}
}

4.N叉树的最大深度

思路:递归三部曲

第一步:确定参数和返回值

此题也是求树的深度需要遍历结点,传入结点返回深度值

第二步:确定终止条件

当结点为空返回深度0,当孩子为空返回1,其他就遍历孩子列表挨个求出最大深度

第三步:确定单层逻辑

保存孩子的深度,取最大值

class Solution {public int maxDepth(Node root) {if(root == null){return 0;}if(root.children.isEmpty()){return 1;}List<Integer> list = new ArrayList<>();for(Node node : root.children){int res = maxDepth(node);list.add(res);}int max = 0;for(int num : list){if(num > max){max = num;}}return 1 + max;}}


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

相关文章

Camunda 7.x 系列【38】表单服务 FormService

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 概述2. 演示2.1 获取流程开始表单2.2 启动流程2.3 查询任务表单2.4 完成任务3. 实际开发…

中国应试教育市场:挑战与机遇并存,金榜状元引领前行

2023年全国高考报名人数1291万人再次刷新历史纪录&#xff0c;但一本的录取率仅为23%&#xff1b;教育部2021年开始推行中考分流政策&#xff0c;只有约为50%初中毕业生可以升入普通高中&#xff1b;“双减”政策的推行&#xff0c;使得高考升学的压力提前到中考阶段&#xff0…

json提取反向递归

口令 提取 反向递归 /storage/emulated/0/文件/json/chat-store_2023-8-24(22&#xff09;.json 要提取反向递归的数据&#xff0c;请使用以下代码&#xff1a; import jsondef print_reverse_tree(data, level0):for key, value in data.items():if isinstance(value, dict)…

我的创作纪念日----探索创作之旅

创作之旅 创作之始启程追寻&#xff1a;寻觅灵感的起点思绪迸发&#xff1a;创意萌芽与滋长 创作之途探索未知&#xff1a;友人的帮助与指导 创作之行倾听内心&#xff1a;创意荒漠的探寻 主页传送门&#xff1a;&#x1f4c0; 传送 创作之始 ​ ​  在我尚未察觉的瞬间&…

可输入的下拉框

项目场景&#xff1a; 问题描述 可以输入的下拉框&#xff0c;在element-ui中 可以找到的是 input 组件 中-带输入建议 的可以达到效果 当是下拉框时&#xff0c;匹配输入的值与下拉框的数据&#xff0c;如果可以匹配&#xff0c;那么就选择那条&#xff0c;如果不能匹配那么&…

Redis 持久化和发布订阅

一、持久化 Redis 是内存数据库&#xff0c;如果不将内存中的数据库状态保存到磁盘&#xff0c;那么一旦服务器进程退出&#xff0c;服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能&#xff01; 1.1、RDB&#xff08;Redis DataBase&#xff09; 1.1.1 …

华为OD机试 - 租车骑绿道 - 双指针(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、解题思路1、输入2、输出3、说明4、双指针算法 五、Java算法源码六、效果展示 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 一、题目描述 部门组织绿岛骑行团建活动&#xff0c;租用公共双人自行车骑行&#xff0c;…

服务器端污染属性反射提升权限

污染属性反射检测服务器端原型污染 通过服务器端原型污染提升权限 Lab: Privilege escalation via server-side prototype pollution 必要知识点 开发人员很容易陷入的一个陷阱是忘记或忽略 JavaScript 循环迭代对象的所有可枚举属性这一事实&#xff0c;包括它通过原型链继…