【LeetCode】剑指 Offer 55 - I. 二叉树的深度

文章目录

  • 【LeetCode】剑指 Offer 55 - I. 二叉树的深度
  • 一、后序遍历(DFS)
  • 二、层序遍历

一、后序遍历(DFS)

关键点,此树地深度和其左(右)子树的深度之间的关系。显然,此树的深度等于左子树的深度与右子树的深度中的最大值 + 1

算法解析:

  1. 终止条件:当 root 为空,说明已越过叶结点,因此返回深度 0
  2. 递推工作:本质上是对树做后序遍历
    1. 计算结点 root 的左子树的深度,即调用 maxDepth(root.left);
    2. 计算结点 root 的右子树的深度,即调用 maxDepth(root.right);
  3. 返回值:返回此树的深度,即 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,直到遍历完成,则可得到树的深度

算法解析:

  1. 特例处理:当 root 为空,直接返回深度 0
  2. 初始化:队列 queue (加入根结点 root ),计数器 res = 0
  3. 循环遍历:当 queue 为空时跳出
    1. 初始化一个空列表 tmp,用于临时存储下一层结点
    2. 遍历队列:遍历 queue 中的各结点 node,并将其左子结点和右子结点加入 tmp
    3. 更新队列:执行 queue = tmp,将下一层结点赋值给 queue
    4. 统计层数:执行 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. 二叉树的深度相关推荐

  1. 剑指 Offer 55 - I. 二叉树的深度

    题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 例如: 给定二叉树 [3,9,20,null,null,15 ...

  2. 【※ LeetCode 剑指 Offer 07. 重建二叉树(中等)】尚待完善

    题目: 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 来源:力扣(LeetCode) 链接:https://leetc ...

  3. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列

    剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...

  4. 【LeetCode】剑指 Offer 55 - II. 平衡二叉树

    [LeetCode]剑指 Offer 55 - II. 平衡二叉树 文章目录 [LeetCode]剑指 Offer 55 - II. 平衡二叉树 一.后序遍历 + 剪枝(从底至顶) 一.后序遍历 + ...

  5. 【LeetCode 剑指offer刷题】树题6:28 对称二叉树(101. Symmetric Tree)

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 101. Symmetric Tree /**  * Definition for a binary tree no ...

  6. leetcode 打印_剑指 Offer 32 - III 从上到下打印二叉树 III - leetcode 剑指offer

    题目难度: 中等 原题链接 今天继续更新剑指 offer 系列, 这道题相比昨天那道题多了个每层打印方向不同的需求, 聪明的你想到应该如何实现了吗? 老样子晚上 6 点 45 分准时更新公众号 每日精 ...

  7. 【LeetCode】剑指 Offer 37. 序列化二叉树

    [LeetCode]剑指 Offer 37. 序列化二叉树 文章目录 [LeetCode]剑指 Offer 37. 序列化二叉树 package offer;import java.util.Link ...

  8. 【LeetCode】剑指 Offer 07. 重建二叉树

    [LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...

  9. 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先

    [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...

最新文章

  1. 五大颠覆性特征带你认识6G网络
  2. SpringBoot自适应异常处理
  3. mysql xtrabackup 遭遇严重bug
  4. centos7 卸载软件
  5. 纸巾,理由最充分的涨价
  6. 大数据技术与应用实训心得_信息学院成功举办大数据技术与应用论坛
  7. Aloha:一个略屌的分布式任务调度框架
  8. 〔总结〕容易遗忘的JS知识点整理
  9. 最新JCR期刊影响因子及分区情况(中科院SCI期刊分区表)
  10. Git下载安装及基本配置
  11. 119、交换机基本配置命令
  12. OpenLinux平台学习(参照Neoway N720/N75 系列产品)
  13. Graphics2D绘制图片,线段、矩形、圆形
  14. PyTorch搭建CNN实现时间序列预测(风速预测)
  15. 丝路传说架设服务器维护,《丝路传说》一键整合服务端+GM工具+视频架设教程...
  16. Java使用Jsoup爬虫获取网站内容(三)获取元素内容属性的方法
  17. i春秋网鼎杯网络安全大赛advanced题目writeup
  18. 【周易测名字】2019年5月出生林姓男宝,给他起名叫林庆文合适吗?
  19. 周阳老师JUC并发编程
  20. favicon是什么,怎么用?

热门文章

  1. python网页调用摄像头_Python调用摄像头
  2. eureka 集群失败的原因_对于注册中心,ZooKeeper、Eureka哪个更合适?
  3. linux批量过去5小时前文件名,Linux批量修改文件名
  4. java自带的jvm在哪里看_使用jdk工具查看jvm笔记
  5. 我如何将亿次的计算降为实时
  6. 算法笔记_231:网格中移动字母(Java)
  7. 已管理员身份从cmd框进入mysql,及常用的简单操作!
  8. Call to undefined function imagettftext()解决方法
  9. 强大的PHP给图片加水印
  10. 兼容所有浏览器的设为首页收藏本站js代码,推荐使用