LeetCode 热题 100_二叉树的最大深度(37_104_简单_C++)(二叉树;递归;层次遍历)

embedded/2024/12/29 7:56:52/

LeetCode 热题 100_二叉树的最大深度(37_104)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(递归(深度优先)):
        • 思路二(层次遍历(广度优先遍历)):
      • 代码实现
        • 代码实现(思路一(递归(深度优先))):
        • 代码实现(思路二(层次遍历(广度优先遍历))):
        • 以思路一为例进行调试

题目描述:

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

输入输出样例:

示例 1:
请添加图片描述

输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:
输入:root = [3,9,20,null,null,15,7]
输出:3

提示:
树中节点的数量在 [0, 104] 区间内。
-100 <= Node.val <= 100

题解:

解题思路:

思路一(递归(深度优先)):

1、通过递归的返回过程,计算树的深度(nullptr结点深度为0,叶节点深度为1),从叶节点开始计算深度:max(l,r)+1。
本题官方题解链接(有递归过程图)
543.二叉树的直径:深度计算的视频讲解,感觉很不错(比本题官方题解讲的好)

2、复杂度分析:
① 时间复杂度:O(n),其中 n 为二叉树节点的个数。每个节点在递归中只被遍历一次。

② 空间复杂度:O(height),其中 height 表示二叉树的高度。递归函数需要栈空间,而栈空间取决于递归的深度,因此空间复杂度等价于二叉树的高度。

思路二(层次遍历(广度优先遍历)):

1、采用层次便利的方法,层次遍历故名思意就是采用从左到右的顺序从上到下,一层一层的遍历,每次遍历完一层结点将深度+1。

2、具体思路如下:
① 使用队列存储结点,从左到右将一层结点入队,记录此时的队列中元素的个数size。
② size个结点依次出队,同时将其存在的孩子结点依次入队(下一层结点入队),一层结点出队深度+1。
③ 重复上述过程直到队列为NULL。

3、复杂度分析
① 时间复杂度:O(n),其中 n 为二叉树的节点个数。与方法一同样的分析,每个节点只会被访问一次。

② 空间复杂度:此方法空间的消耗取决于队列存储的元素数量,其在最坏情况下会达到 O(n)。

代码实现

代码实现(思路一(递归(深度优先))):
//方法一:递归的方式求书的最大深度
int maxDepth1(TreeNode *root){if (root==nullptr) return 0;return max(maxDepth1(root->left),maxDepth1(root->right))+1;} 
代码实现(思路二(层次遍历(广度优先遍历))):
//方法二:层次遍历求二叉树的最大深度
int maxDepth2(TreeNode *root){if (root==nullptr) return 0;queue<TreeNode *> Q;Q.push(root);int ans=0;while(!Q.empty()){//size记录一层节点的个数int size=Q.size();//一次处理一层数据,将这层的孩子结点入队while (size>0){//一个结点出队TreeNode *node=Q.front();Q.pop();//其左右孩子不为空则入队if (node->left!=nullptr) Q.push(node->left);if(node->right!=nullptr) Q.push(node->right);//处理一个结点,size对应减小size-=1;}//处理一层结点后深度+1ans+=1;}return ans;
}
以思路一为例进行调试
#include<iostream>
#include<queue>
using namespace std;struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode():val(0),left(nullptr),right(nullptr){}TreeNode(int x):val(0),left(nullptr),right(nullptr){}TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};//通过数组创建二叉树,-1代表结点为nullptr
TreeNode* createTree(vector<int> &a){if(a.empty()) return nullptr;TreeNode *root=new TreeNode(a[0]);queue<TreeNode *> Q;Q.push(root);int i=1;while (i<a.size()){TreeNode *node = Q.front();Q.pop();if(i<a.size()&&a[i]!=-1){node->left=new TreeNode(a[i]);Q.push(node->left); }i++;if (i<a.size()&&a[i]!=-1){node->right=new TreeNode(a[i]);Q.push(node->right);}i++;}return root;
}//方法一:递归的方式求书的最大深度
class Solution
{
public://方法一:递归的方式求书的最大深度int maxDepth1(TreeNode *root){if (root==nullptr) return 0;return max(maxDepth1(root->left),maxDepth1(root->right))+1;} 
};int main(){vector<int> a={1, 2, 3, 4, 5, -1, 6};//创建二叉树TreeNode *root=createTree(a);Solution s;//计算二叉树的最大深度并输出cout<<s.maxDepth1(root);return 0;
}

LeetCode 热题 100_二叉树的最大深度(37_104)原题链接
欢迎大家和我沟通交流(✿◠‿◠)


http://www.ppmy.cn/embedded/149681.html

相关文章

ArkTs组件(2)

一.下拉列表组件&#xff1a;Select 1.接口 Select(options: Array<SelectOption>) 参数名类型必填说明optionsArray<SelectOption>是设置下拉选项。 SelectOption对象说明 名称类型必填说明valueResourceStr是 下拉选项内容。 iconResourceStr否 下拉选项图片…

关于高级acl的配置和讲解

高级ACL&#xff08;Access Control List&#xff0c;高级访问控制列表&#xff09;是网络设备&#xff08;如路由器或交换机&#xff09;用来过滤和控制流量的一种机制。它比标准ACL更灵活&#xff0c;能够根据更多的条件来决定是否允许或拒绝数据包通过。高级ACL&#xff08;…

【数据科学导论】第五章·数据可视化与文本分析

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;数据处理与分析_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言…

pd.read_json时出现ValueError: Value is too big!的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Android Studio使用BottomNavigationView实现底部导航栏demo

Android Studio使用BottomNavigationView实现底部导航栏demo 说明项目创建页面代码实现底部导航栏切换代码实现 说明 安卓小白第一次学习安卓&#xff0c;这里记录下自己学习开发安卓的底部导航栏的过程&#xff0c;用原生安卓实现&#xff0c;使用Java语言进行代码编写&#…

实验室服务器Ubuntu安装使用全流程

一、制作U盘启动盘 工具&#xff1a; 一个32G以上的U盘Rufuse镜像烧录软件下载&#xff1a;https://cn.ultraiso.net/xiazai.htmlRufus - 轻松创建 USB 启动盘https://cn.ultraiso.net/xiazai.htmlUbuntu系统镜像&#xff1a;https://ubuntu.com/download/alternative-downlo…

NLP 中文拼写检测纠正论文 A Hybrid Approach to Automatic Corpus Generation 代码实现

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

【每日学点鸿蒙知识】userAgent识别问题、StatusBar颜色、taskpool中操作同一个对象、scroll组件

1、HarmonyOS window.navigator.userAgent.toLowerCase()方法获取的值都有哪些&#xff1f; h5暂无法通过window.navigator.userAgent识别&#xff0c;只能通过原生注入固定字段识别&#xff0c; 可以参考这篇文档&#xff1a;https://developer.huawei.com/consumer/cn/forum…