刻意练习:LeetCode实战 -- Task21. 二叉树的最大深度
背景
本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了 三个简单、两个中等、一个困难 等级的题目,共计三十道题,利用三十天的时间完成这组刻意练习。
本次任务的知识点:树
树 是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由 n(n>0)
个有限节点组成的一个具有层次关系的集合。
把它叫做「树」是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
它具有以下的特点:
- 每个节点都只有有限个子节点或无子节点;
- 没有父节点的节点称为根节点;
- 每一个非根节点有且只有一个父节点;
- 除了根节点外,每个子节点可以分为多个不相交的子树;
- 树里面没有环路。
题目
- 题号:104
- 难度:简单
- https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
3/ \9 20/ \15 7
返回它的最大深度 3 。
实现
第一种:采用层次遍历的思路
- 执行结果:通过
- 执行用时:108 ms, 在所有 C# 提交中击败了 88.13% 的用户
- 内存消耗:25.5 MB, 在所有 C# 提交中击败了 5.97% 的用户
/*** Definition for a binary tree node.* public class TreeNode {* public int val;* public TreeNode left;* public TreeNode right;* public TreeNode(int x) { val = x; }* }*/
public class Solution
{public int MaxDepth(TreeNode root){if (root == null)return 0;Queue<TreeNode> q = new Queue<TreeNode>();int deep = 0;q.Enqueue(root);while (q.Count != 0){deep++;int count = 0;int size = q.Count;while (count < size){TreeNode node = q.Dequeue();count++;if (node.left != null)q.Enqueue(node.left);if (node.right != null)q.Enqueue(node.right);}}return deep;}
}
第二种:利用递归
思路:递归分别求左右子树的最大深度,并加到原有层数上,最后返回两者中的最大值。
- 执行结果:通过
- 执行用时:132 ms, 在所有 C# 提交中击败了 16.62% 的用户
- 内存消耗:25.5 MB, 在所有 C# 提交中击败了 6.06% 的用户
/*** Definition for a binary tree node.* public class TreeNode {* public int val;* public TreeNode left;* public TreeNode right;* public TreeNode(int x) { val = x; }* }*/
public class Solution
{public int MaxDepth(TreeNode root){if (root == null)return 0;int llen = 1;int rlen = 1;if (root.left != null){llen += MaxDepth(root.left);}if (root.right != null){rlen += MaxDepth(root.right);}return llen > rlen ? llen : rlen;}
}
往期活动
LSGO软件技术团队会定期开展提升编程技能的刻意练习活动,希望大家能够参与进来一起刻意练习,一起学习进步!
- Python基础刻意练习活动即将开启,你参加吗?
- Task01:变量、运算符与数据类型
- Task02:条件与循环
- Task03:列表与元组
- Task04:字符串与序列
- Task05:函数与Lambda表达式
- Task06:字典与集合
- Task07:文件与文件系统
- Task08:异常处理
- Task09:else 与 with 语句
- Task10:类与对象
- Task11:魔法方法
- Task12:模块
我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔。
我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。
愿我们一起学习,一起进步,相互陪伴,共同成长。
后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:
刻意练习:LeetCode实战 -- Task21. 二叉树的最大深度相关推荐
- LeetCode实战:二叉树的最大深度
题目英文 Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the ...
- LeetCode实战:二叉树的最近公共祖先
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...
- LeetCode实战:二叉树中的最大路径和
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a non ...
- 20190830:(leetcode习题)二叉树的最大深度
二叉树的最大深度 题目 大致思路 代码实现 题目 大致思路 递归实现:当前节点深度为子节点的深度+1 直接遍历查找:逐次记录深度即可 代码实现 public int maxDepth(TreeNode ...
- 刻意练习:LeetCode实战 -- Task22. 二叉树的中序遍历
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...
- [Leetcode总结] 104.二叉树的最大深度
给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15,7], ...
- leetcode系列-104.二叉树的最大深度
题目描述:给定一个二叉树,找出其最大深度.二叉树的深度为根节点到最远叶子节点的最长路径上的节点数.说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15, ...
- LeetCode实战:排序链表
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Sort a link ...
- LeetCode实战:除自身以外数组的乘积
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given an ar ...
最新文章
- 如何理解和评价机器学习中的表达能力、训练难度和泛化性能
- PNAS:人类首次利用新型脑磁图可视化快速大脑信号
- saej1929_(1929年-2020年)
- skywalking(2)
- linux下安装TensorFlow(centos)
- 动态规划问题中找零问题 --C语言实现
- RWMutex的一道面试题
- 亚马逊EC2根硬盘空间扩容
- Web前端工作笔记007---h5 canvas_雨滴头像合成_图像合成_合成雨滴头像
- 办公专用计算机配置,办公电脑用什么配置的好 2017办公电脑配置推荐
- 大话西游免费版最新服务器是,2020年4月1日服务器数据互通公告
- linux 排查cpu负载过高原因
- 苹果触控鼠标和触控板 (4) jitouch
- 基于facenet人脸识别设计文档
- 网络安全产业快速递增网络安全体系以形成持有NISP和CISP证书可加分
- PostgreSQL分区
- 技术汇总:第七章:三种验证方式
- esxi突然启动不起来了!显示:Error loading /sb.v00
- hihoCoder 1272 买零食
- IDEA背景颜色设置问题