当前位置: 首页 > news >正文

Leetcode 104. 二叉树的最大深度 C++实现

Leetcode 104. 二叉树的最大深度

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

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

25f68f8bc0f64a6b951ebaf471cc795f.png

/*** 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) {}* };*/

方法1:递归法 。自底向上

6ec1197bef7543cdabf683aa2bbd0088.png

434eb91071f7483982e2c0dd563e433a.png

55fbe3b66f9f479293f2e6856bef2ab5.png

时间复杂度:O(n),其中 n 为二叉树的节点个数。

空间复杂度:O(n),最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。

代码:

class Solution {
public:int maxDepth(TreeNode* root) {if(root == nullptr) return 0;int leftdepth = maxDepth(root->left);int rightdepth = maxDepth(root->right);return max(leftdepth,rightdepth) + 1;}
};

方法2:自顶向下

定义一个全局变量 ans ,每向下递归一次就更新一次 ans 的值,遍历完成后 ans 的值就是答案。

代码:

class Solution {int ans = 0;// 初始化全局变量ansvoid dfs(TreeNode* node,int depth){if(node == nullptr) return;depth++;ans = max(ans,depth);dfs(node->left,depth);dfs(node->right,depth);}
public:int maxDepth(TreeNode* root) {dfs(root,0);return ans;}
};

时间复杂度:O(n),其中 n 为二叉树的节点个数。

空间复杂度:O(n),最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。

 


http://www.mrgr.cn/news/6710.html

相关文章:

  • 哈夫曼树编码实现
  • PD取电快充协议方案
  • 使用C++和JUCE开发一个简单的音频插件
  • SpringBoot入门
  • django学习入门系列之第十点《初识 django》
  • Linux下快速搭建七日杀官方私人服务器教程
  • React antd Table表格动态合并单元格
  • 全网最适合入门的面向对象编程教程:37 Python常用复合数据类型-列表和列表推导式
  • Oracle 的DBA有哪些权限
  • GPT-4o语音功能潜在风险分析与技术挑战
  • 只用一个 HTML 元素可以写出多少形状?——伪元素篇(下)
  • 【大前端】VUE使用TSX、JSX
  • jvm调优
  • vllm 部署GLM4模型进行 Zero-Shot 文本分类实验,让大模型给出分类原因,准确率可提高6%
  • mysql中出现错误1138-Invalid use of NULL value
  • MySQL DDL详细讲解和常见问题案例示范
  • 亚运会志愿者管理系统-计算机毕设Java|springboot实战项目
  • PyCharm单步调试
  • Stable Diffusion 使用详解(8)--- layer diffsuion
  • fpga图像处理实战-开运算