剑指offer55-I-二叉树的深度
问题描述
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [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-二叉树的深度相关推荐
- 剑指offer:二叉树的深度
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 递归做法 /* struct TreeNode {int ...
- 《剑指offer》二叉树的深度
题目:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解析:递归法求解,非递归法求解参考另外一篇博文 非递归法:http:// ...
- 【剑指offer】二叉树的深度_solution2
题目:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 1 /* 2 struct TreeNode { 3 int val; ...
- 《剑指Offer》 二叉树的深度
题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 思路: 如果当前根节点为NULL返回0,递归调用左右子节点,返回l ...
- 剑指Offer值二叉树的深度
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 递归地求解,深度是左右子树中较高的一个,递归终止条件的遇到 ...
- 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java
<LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...
- 剑指offer07.重建二叉树
剑指offer07重建二叉树 题目 : 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 示例 : Input: preo ...
- 【LeetCode】剑指 Offer 34. 二叉树中和为某一值的路径
[LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 文章目录 [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 package offer;import ja ...
- 【LeetCode】剑指 Offer 27. 二叉树的镜像
[LeetCode]剑指 Offer 27. 二叉树的镜像 文章目录 [LeetCode]剑指 Offer 27. 二叉树的镜像 一.递归法 二.辅助栈(或队列) 一.递归法 根据二叉树镜像的定义,考 ...
- 算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)
文章目录 剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树: 样例 1: 限制: 分析 题解 rust go c++ java python 原题传送门:https://leetcode. ...
最新文章
- 就业技术书文件表格_Word格式:工程预结算工作流程图及工作表单,附20余表格...
- 爬取百度知道分类_百度指数爬虫|介绍篇
- C语言socket connect()函数(初始化套接字上的连接)(未完)(如何测试socket是否已经断开,如何判断socket是否断开)
- byteofpython.info_byteofpython学习笔记(2)
- LeetCode MySQL 1113. 报告的记录
- mysql 分页 jdbc_JDBC调用MySQL分页存储过程实现(一)
- android报警声音
- KVASER 与 Matlab联合使用
- 微软手环2服务器,微软手环2评测 数据狂的最爱
- 基于STM32 LCD屏实现的俄罗斯方块小游戏(20220522完成 第一个综合类项目)
- 史丰收速算-第五届蓝桥杯省赛
- grub4dos和bootmgr双启动
- python自动化交易_python 优矿自动化交易
- 苹果历届发布会的邀请函
- linux管理控制面板--可视化管理linux
- Image Matting代码和算法效果总结
- 基于proe的阀体零件的机械加工工艺及夹具设计
- 可穿戴设备:越来越清晰的苹果iWatch
- 美国政府正在亲手扼杀互联网创新
- 施耐德电气“创新开放日”走进中国软件研发中心 以软件与创新驱动产业“双转型”
热门文章
- 疑似realme旗舰新机入网:采用升降前置摄像头
- java操作数据库 jdbc
- 移动端软件测试要点,移动端测试用例设计总结
- dataframe修改数据_利用Python进行数据分析(语法篇)
- 安卓采集摄像头画面生成MP4文件
- 查看Linux下端口占用情况的命令
- 灯珠电路图_可充电led台灯电路图
- 【ElasticSearch】Es 源码之 IndicesService 源码解读
- 【Flink】Flink Invalid timestamp -1 Timestamp should always be none-negative or null
- 【读书笔记】Java NIO (中文版) 读书笔记