【LeetCode】剑指 Offer 55 - I. 二叉树的深度
【LeetCode】剑指 Offer 55 - I. 二叉树的深度
文章目录
- 【LeetCode】剑指 Offer 55 - I. 二叉树的深度
- 一、后序遍历(DFS)
- 二、层序遍历
一、后序遍历(DFS)
关键点,此树地深度和其左(右)子树的深度之间的关系。显然,此树的深度等于左子树的深度与右子树的深度中的最大值 + 1
算法解析:
- 终止条件:当 root 为空,说明已越过叶结点,因此返回深度 0
- 递推工作:本质上是对树做后序遍历
- 计算结点 root 的左子树的深度,即调用 maxDepth(root.left);
- 计算结点 root 的右子树的深度,即调用 maxDepth(root.right);
- 返回值:返回此树的深度,即 max(maxDepth(root.left),maxDepth(root.right)) + 1
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution {public int maxDepth(TreeNode root) {if(root == null) return 0;return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1;}
}
- 时间复杂度 O(n),n 为树的结点数量,计算树的深度需要遍历所有结点
- 空间复杂度 O(n),最差情况下(当树退化为链表时),递归深度可达到 N
二、层序遍历
- 树的层序遍历 / 广度优先搜索往往利用队列实现
- 关键点:每遍历一层,则计数器 +1,直到遍历完成,则可得到树的深度
算法解析:
- 特例处理:当 root 为空,直接返回深度 0
- 初始化:队列 queue (加入根结点 root ),计数器 res = 0
- 循环遍历:当 queue 为空时跳出
- 初始化一个空列表 tmp,用于临时存储下一层结点
- 遍历队列:遍历 queue 中的各结点 node,并将其左子结点和右子结点加入 tmp
- 更新队列:执行 queue = tmp,将下一层结点赋值给 queue
- 统计层数:执行 res += 1,代表层数加 1
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution{public int maxDepth(TreeNode root){if(root == null) return 0;LinkedList<TreeNode> queue = new LinkedList<>();LinkedList<TreeNode> tmp;queue.add(root);int res = 0;while(!queue.isEmpty()){ //当前层不为空tmp = new LinkedList<>(); //重新初始化 tmpfor(TreeNode node : queue){ //遍历当前层结点if(node.left != null) tmp.add(node.left); //左子结点加入队列if(node.right != null) tmp.add(node.right); //右子结点加入队列}queue = tmp; //将当前层结点替换为下一层res++; //层数加 1}return res;}
}
- 时间复杂度 O(n):n 为树的结点数量,计算树的深度需要遍历所有结点
- 空间复杂度 O(n):最差情况下(当树平衡时),队列 queue 同时存储 n/2 个结点
【LeetCode】剑指 Offer 55 - I. 二叉树的深度相关推荐
- 剑指 Offer 55 - I. 二叉树的深度
题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 例如: 给定二叉树 [3,9,20,null,null,15 ...
- 【※ LeetCode 剑指 Offer 07. 重建二叉树(中等)】尚待完善
题目: 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 来源:力扣(LeetCode) 链接:https://leetc ...
- leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列
剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...
- 【LeetCode】剑指 Offer 55 - II. 平衡二叉树
[LeetCode]剑指 Offer 55 - II. 平衡二叉树 文章目录 [LeetCode]剑指 Offer 55 - II. 平衡二叉树 一.后序遍历 + 剪枝(从底至顶) 一.后序遍历 + ...
- 【LeetCode 剑指offer刷题】树题6:28 对称二叉树(101. Symmetric Tree)
[LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 101. Symmetric Tree /** * Definition for a binary tree no ...
- leetcode 打印_剑指 Offer 32 - III 从上到下打印二叉树 III - leetcode 剑指offer
题目难度: 中等 原题链接 今天继续更新剑指 offer 系列, 这道题相比昨天那道题多了个每层打印方向不同的需求, 聪明的你想到应该如何实现了吗? 老样子晚上 6 点 45 分准时更新公众号 每日精 ...
- 【LeetCode】剑指 Offer 37. 序列化二叉树
[LeetCode]剑指 Offer 37. 序列化二叉树 文章目录 [LeetCode]剑指 Offer 37. 序列化二叉树 package offer;import java.util.Link ...
- 【LeetCode】剑指 Offer 07. 重建二叉树
[LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...
- 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先
[LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...
最新文章
- 五大颠覆性特征带你认识6G网络
- SpringBoot自适应异常处理
- mysql xtrabackup 遭遇严重bug
- centos7 卸载软件
- 纸巾,理由最充分的涨价
- 大数据技术与应用实训心得_信息学院成功举办大数据技术与应用论坛
- Aloha:一个略屌的分布式任务调度框架
- 〔总结〕容易遗忘的JS知识点整理
- 最新JCR期刊影响因子及分区情况(中科院SCI期刊分区表)
- Git下载安装及基本配置
- 119、交换机基本配置命令
- OpenLinux平台学习(参照Neoway N720/N75 系列产品)
- Graphics2D绘制图片,线段、矩形、圆形
- PyTorch搭建CNN实现时间序列预测(风速预测)
- 丝路传说架设服务器维护,《丝路传说》一键整合服务端+GM工具+视频架设教程...
- Java使用Jsoup爬虫获取网站内容(三)获取元素内容属性的方法
- i春秋网鼎杯网络安全大赛advanced题目writeup
- 【周易测名字】2019年5月出生林姓男宝,给他起名叫林庆文合适吗?
- 周阳老师JUC并发编程
- favicon是什么,怎么用?
热门文章
- python网页调用摄像头_Python调用摄像头
- eureka 集群失败的原因_对于注册中心,ZooKeeper、Eureka哪个更合适?
- linux批量过去5小时前文件名,Linux批量修改文件名
- java自带的jvm在哪里看_使用jdk工具查看jvm笔记
- 我如何将亿次的计算降为实时
- 算法笔记_231:网格中移动字母(Java)
- 已管理员身份从cmd框进入mysql,及常用的简单操作!
- Call to undefined function imagettftext()解决方法
- 强大的PHP给图片加水印
- 兼容所有浏览器的设为首页收藏本站js代码,推荐使用