【二叉树算法题记录】最大和最小深度

devtools/2024/9/23 17:20:42/

最大和最小深度

  • 104.二叉树的最大深度
    • 题目描述
    • 题目分析
      • 递归法
  • 111.二叉树的最小深度
    • 题目描述
    • 题目分析
      • 迭代法

104.二叉树的最大深度

题目描述

给定一个二叉树root,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

题目分析

递归法

递归法实际上可以简化成寻找根节点左右子树的最大深度。这样一来我们得到左右子树的最大深度,然后选择较大的那一个深度+1即为整体二叉树的最大深度。不过,我们还得确定遍历的顺序:由于是先得到左右子树的最大深度,再得到根节点的最大深度,所以是左-右-中的顺序,即后序遍历。那么就可以通过递归三部曲写出整体流程:

  • 确定函数返回类型与传入参数:int maxDepth(TreeNode* root)
  • 确定递归终止条件:如果递归到一个没有孩子的节点node时,即运行到maxDepth(node->left)maxDepth(node->right),此时node->left==NULL, node->right==NULL,就要停止往下递归,所以递归条件是:if(root==NULL) return 0;(这里的root就相当于上面的node->leftnode->right
  • 确定递归逻辑:也就是往下遍历左子树和右子树的最大深度,然后总结出基于该根节点的最大深度

递归的总体代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int maxDepth(TreeNode* root) {// 确定递归终止条件if(root==NULL) return 0;// 递归逻辑:遍历左右子树,然后计算最大深度int left_height = maxDepth(root->left);int right_height = maxDepth(root->right);int max_height = 1 + max(left_height, right_height);return max_height;}
};

111.二叉树的最小深度

题目描述

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

题目分析

迭代法

迭代法实际上就是层次遍历,我们遍历到左右孩子都为空的节点就可以返回了,它所在层数一定是二叉树的最小深度。

class Solution {
public:int minDepth(TreeNode* root) {// 碰到左右孩子都为NULL就返回queue<TreeNode*> q;if(root!=NULL) q.push(root);int layer = 0;  // 二叉树深度while(!q.empty()){int size = q.size();layer++; while(size--){TreeNode* node = q.front();q.pop();if(node->left) q.push(node->left);if(node->right) q.push(node->right);if(node->left==NULL && node->right==NULL) return layer;}}return layer;}
};

http://www.ppmy.cn/devtools/36319.html

相关文章

GraphQL和RESTful的对比:通过实际的示例来介绍GraphQL的构成和操作方式,并和传统的RESTful API进行比较,分析它们的优劣势

GraphQL是一种通过单个端点接收查询和操作数据的API设计方式。通过客户端发送的查询&#xff0c;服务器能够精确地返回客户端所请求的数据。 例如&#xff0c;我们有一个GraphQL的查询如下&#xff1a; {user(id: "1") {nameemailfriends {name}} }这个查询针对ID为…

VBS中的多值匹配检查

实际场景中有这样一个需求&#xff0c;判断某个对象的某个属性&#xff0c;如果它的字符串值中包含某些特定的字符串&#xff0c;那么要进行开始过程A&#xff0c;否则开始过程B。 最简单的实现是 if InStr(obj.title,".大师")<>0 or InStr(obj.title,".…

VBA随机取数在Excel中的应用---10以内加法出题及计算得分

VBA随机取数在Excel中的应用---10以内加法出题及阅卷 小学生加减乘除的计算,只要不是应用题,完全可以用VBA随机取数解决,甚至连阅卷都可以用VBA操作。现在写一个最简单的,10以内的加法。 用到两个关键点:随机取数Int(0 + 11 * Rnd())和字典去重(Scripting.Dictionary) …

yolov5-pytorch-Ultralytics训练+预测+报错处理记录

一、前言 玩一段时间大模型&#xff0c;也该回归一下图像识别。本项目用于记录使用基于Ultralytics的yolov5进行目标检测测试。为什么用Ultralytics呢&#xff1f;答案有3 1、其良好的生态&#xff0c;方便我们部署到其它语言和设备上。因此本次测试结论&#xff1a;大坑没有&…

为什么会查询不到DNS信息?怎么排查?

DNS&#xff08;域名系统&#xff09;是将域名转换为相应 IP 地址的关键系统。查询 DNS 信息具有重要作用&#xff0c;通过查询 DNS 信息&#xff0c;我们可以知道域名对应的 IP 地址&#xff0c;这是最主要的信息&#xff0c;使设备能与目标服务器进行通信&#xff1b;其次是域…

ubuntu 安装单节点HBase

下载HBase mkdir -p /home/ellis/HBase/ cd /home/ellis/HBase/ wget https://downloads.apache.org/hbase/2.5.8/hbase-2.5.8-bin.tar.gz tar -xvf hbase-2.5.8-bin.tar.gz安装java jdk sudo apt install openjdk-11-jdksudo vim /etc/profileexport JAVA_HOME/usr/lib/jvm/…

05-MessageConverter和ControllerAdvice

准备对象 Data static class User {private String name;private int age;JsonCreator // 默认jackson会使用无参构造器反序列化 这里强制使用当前带参构造器public User(JsonProperty("name") String name, JsonProperty("age") int age) {this.name …

XSS Challenges 靶场通关解析

前言 XSS Challenges&#xff08;跨站脚本攻击挑战&#xff09;是一种用于学习和测试跨站脚本&#xff08;XSS&#xff09;漏洞的实验性平台。这些挑战旨在帮助安全研究人员和开发人员了解XSS漏洞的工作原理、检测方法和防御技巧。 通常&#xff0c;XSS Challenges平台提供一…