问题描述

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

例如:

给定二叉树 [3,9,20,null,null,15,7],

    3/ \9  20/  \15   7

返回它的最大深度 3 。

解题思路

深度优先搜索(DFS)

也可以理解为二叉树的递归遍历,
我们将二叉树的深度作为参数,然后进行二叉树的递归遍历,当遍历到叶结点的时候,就将父节点的深度与当前最大深度进行比较,如果父节点的深度更大,就更新当前最大深度。否则的话,深度值加1,继续递归的寻找左右子树。

class Solution {private int mDepth;             //全局变量,保存当前最大深度private void SeaMaxDepth(TreeNode p, int i) {//当p结点为空时,说明此时到了叶结点,然后将父节点的深度与当前最大深度进行比较//以便更新当前最大深度if(p==null){mDepth=Math.max(i,mDepth);}else{SeaMaxDepth(p.left,i+1);        //否则的话,深度值+1,继续寻找左子树SeaMaxDepth(p.right,i+1);       //继续寻找右子树}}public int maxDepth(TreeNode root) {SeaMaxDepth(root,0);return mDepth;}
}

层次遍历(BFS)

树的层序遍历 / 广度优先搜索往往利用 队列 实现。
关键点: 每遍历一层,则计数器 +1+1 ,直到遍历完成,则可得到树的深度。
层次遍历的具体步骤可以参看二叉树的层序遍历

class Solution {public int maxDepth(TreeNode root) {if(root==null){return 0;}int mDepth=0;//linkedlist的remove方法是移出链头元素LinkedList<TreeNode> queue=new LinkedList<TreeNode>();//将根节点入队,然后不断的遍历队列queue.add(root);        while(!queue.isEmpty()){//获取当前队列的长度,这个队列的长度相当于当前层次的结点个数int size=queue.size();//将队列中的元素都拿出来,并将其左右结点都入队。每一个for循环,都对应着一个层次for(int i=0;i<size;i++){TreeNode p=queue.remove();if(p.left!=null){queue.add(p.left);}if(p.right!=null){queue.add(p.right);}}//每遍历一层,当前层次即深度+1mDepth++;}return mDepth;}
}

剑指offer55-I-二叉树的深度相关推荐

  1. 剑指offer:二叉树的深度

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 递归做法 /* struct TreeNode {int ...

  2. 《剑指offer》二叉树的深度

    题目:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解析:递归法求解,非递归法求解参考另外一篇博文 非递归法:http:// ...

  3. 【剑指offer】二叉树的深度_solution2

    题目:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 1 /* 2 struct TreeNode { 3 int val; ...

  4. 《剑指Offer》 二叉树的深度

    题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 思路: 如果当前根节点为NULL返回0,递归调用左右子节点,返回l ...

  5. 剑指Offer值二叉树的深度

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 递归地求解,深度是左右子树中较高的一个,递归终止条件的遇到 ...

  6. 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java

    <LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...

  7. 剑指offer07.重建二叉树

    剑指offer07重建二叉树 题目 : 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 示例 : Input: preo ...

  8. 【LeetCode】剑指 Offer 34. 二叉树中和为某一值的路径

    [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 文章目录 [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 package offer;import ja ...

  9. 【LeetCode】剑指 Offer 27. 二叉树的镜像

    [LeetCode]剑指 Offer 27. 二叉树的镜像 文章目录 [LeetCode]剑指 Offer 27. 二叉树的镜像 一.递归法 二.辅助栈(或队列) 一.递归法 根据二叉树镜像的定义,考 ...

  10. 算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)

    文章目录 剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树: 样例 1: 限制: 分析 题解 rust go c++ java python 原题传送门:https://leetcode. ...

最新文章

  1. 就业技术书文件表格_Word格式:工程预结算工作流程图及工作表单,附20余表格...
  2. 爬取百度知道分类_百度指数爬虫|介绍篇
  3. C语言socket connect()函数(初始化套接字上的连接)(未完)(如何测试socket是否已经断开,如何判断socket是否断开)
  4. byteofpython.info_byteofpython学习笔记(2)
  5. LeetCode MySQL 1113. 报告的记录
  6. mysql 分页 jdbc_JDBC调用MySQL分页存储过程实现(一)
  7. android报警声音
  8. KVASER 与 Matlab联合使用
  9. 微软手环2服务器,微软手环2评测 数据狂的最爱
  10. 基于STM32 LCD屏实现的俄罗斯方块小游戏(20220522完成 第一个综合类项目)
  11. 史丰收速算-第五届蓝桥杯省赛
  12. grub4dos和bootmgr双启动
  13. python自动化交易_python 优矿自动化交易
  14. 苹果历届发布会的邀请函
  15. linux管理控制面板--可视化管理linux
  16. Image Matting代码和算法效果总结
  17. 基于proe的阀体零件的机械加工工艺及夹具设计
  18. 可穿戴设备:越来越清晰的苹果iWatch
  19. 美国政府正在亲手扼杀互联网创新
  20. 施耐德电气“创新开放日”走进中国软件研发中心 以软件与创新驱动产业“双转型”

热门文章

  1. 疑似realme旗舰新机入网:采用升降前置摄像头
  2. java操作数据库 jdbc
  3. 移动端软件测试要点,移动端测试用例设计总结
  4. dataframe修改数据_利用Python进行数据分析(语法篇)
  5. 安卓采集摄像头画面生成MP4文件
  6. 查看Linux下端口占用情况的命令
  7. 灯珠电路图_可充电led台灯电路图
  8. 【ElasticSearch】Es 源码之 IndicesService 源码解读
  9. 【Flink】Flink Invalid timestamp -1 Timestamp should always be none-negative or null
  10. 【读书笔记】Java NIO (中文版) 读书笔记