如何计算 N叉树的最大深度
文章目录
- 题目简述
- TreeNode代码
- DFS
- BFS
LeetCode-559
题目简述
给定一个N叉树,找到其最大深度
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
TreeNode代码
class Node {//值public int val;//孩子结点 使用List集合存储public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
}
我们简单的分析一下N叉树:
N叉树存储叶子节点的方式和二叉树不同
从代码中很清除的可以看到N叉树的孩子节点用一个List集合存储。
DFS
我们可以使用深度优先搜索解决这个问题。
思路:
以二叉树为例。
我们可以递归的计算结点左子树和右子树的深度,得到较大的子树深度,然后加一,即可得到本结点的深度。
比如我们要计算根结点的深度getDepth(root)
,则只需要计算 Math.max(getDepth(root.left),getDepth(root.right))+1
即可,而左子树的深度又又可以由左子树的左子树和右子树的最大深度加一得到,递归的解决此问题。
如果不够清晰,可看代码
代码实现:
class Solution {public int maxDepth(Node root) {return getDepth(root);}//此方法用于得到数的深度public int getDepth(Node root){//如果结点为null 则返回0if (root==null){return 0;}//得到子结点链表List<Node> nodes = root.children;//这个遍历用于记录子树的最大深度int ans = 0;//遍历每个结点得到具有最大深度的子结点for (Node n : nodes){ans = Math.max(ans,getDepth(n));}//返回结果return ans+1;}
}
BFS
广度优先搜索也是一个不错的选择
思路:
树的深度就是其对应的层数,我们可以不可以这样子,每当我们遍历一层,将让ans+1,当遍历完最后一层,ans就是我们所需要的结果。
我们利用一个队列来存储叶子节点,每次遍历一层,用一个变量来存储这一层结点的多少,当变量当前层的结点的时候,将下一层的结点存入队列,当最后队列为空时,就遍历完了所有的层数,即可得到树的层数,即树的深度。
不懂可以参考代码
代码:
class Solution {public int maxDepth(Node root) {if (root==null){return 0;}//用来存储结点的队列Queue<Node> queue = new LinkedList<>();//记录层数 没遍历完一层 ans+1int ans = 0 ;//将根节点加入队列queue.add(root);//当队列为空时 结束循环 每一次循环就是遍历其中的一层while (!queue.isEmpty()){//一层一层遍历//size 用来记录当前层 的结点个数int size = queue.size();//用while循环来控制遍历本层结点的个数while (size>0){//得到结点Node node = queue.poll();//得到子结点 即下一层的结点List<Node> list = node.children;//将结点存入队列中queue.addAll(list);//控制本层剩余的结点个数size--;}//遍历完一层 ans+1ans++;}//while循环结束 则将树的所有层 都遍历过了 返回结果return ans;}
}
如何计算 N叉树的最大深度相关推荐
- LeetCode Algorithm 559. N 叉树的最大深度
559. N 叉树的最大深度 Ideas 树问题一般都是用递归解决,树的深度问题就是一个深度优先搜索问题,求当前节点的所有子树的深度然后加上1,就是以当前节点为根的树高度. Code Python c ...
- LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)
目录 104. 二叉树的最大深度 559. N叉树的最大深度 111. 二叉树的最小深度 之前的笔记中,已经用层序遍历解决过这个问题了 现在试着用深度的解法去求解 104. 二叉树的最大深度 给定一个 ...
- 559. N 叉树的最大深度
559. N 叉树的最大深度 给定一个 N 叉树,找到其最大深度. 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数. N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例). ...
- 559.N叉树的最大深度
给定一个 N 叉树,找到其最大深度. 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数. 例如,给定一个 3叉树 : 我们应返回其最大深度,3. 说明: 树的深度不会超过 1000. 树的节点 ...
- 【解题报告】Leecode 559. N 叉树的最大深度——Leecode每日一题
今天是坚持每日一题打卡的第二十二天 题目链接:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/submissions/ 题解汇 ...
- LeetCode 559N叉树的最大深度-简单
给定一个 N 叉树,找到其最大深度. 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数. N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例). 示例 1: 输入:root = ...
- leetcode559. N叉树的最大深度
给定一个 N 叉树,找到其最大深度. 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数. 例如,给定一个 3叉树 : 我们应返回其最大深度,3. 说明: 树的深度不会超过 1000. ...
- LeetCode 559. N叉树的最大深度
文章目录 1. 题目 2. 解题 2.1 递归 2.2 按层queue遍历 1. 题目 给定一个 N 叉树,找到其最大深度. 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数. 2. 解题 2 ...
- C#LeetCode刷题之#559-N叉树的最大深度(Maximum Depth of N-ary Tree)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4088 访问. 给定一个 N 叉树,找到其最大深度. 最大深度是指 ...
最新文章
- 赛可达推病毒攻击检测和情报分享服务
- SAP 电商云 Spartacus UI 路由事件监控
- oracle 日志切换太频繁,诊断一次Oracle日志切换频繁的问题
- Spark2内存调优总结 - 内存划分 与 内存计算 与 调参方式
- 2-10 就业课(2.0)-oozie:9、oozie与hue的整合,以及整合后执行MR任务
- imx6 配置串口波特率_RS232串口多机通信
- Linux中实现远程登录Xshell和Xftp
- java 泛型集合示例_Java 泛型(示例代码)
- python requests cookiejar,Python requests模块cookie实例解析
- azure blob_从Azure Databricks访问Azure Blob存储
- tensorflow分布式运行
- 以非泛型方式调用泛型方法
- [2022年大学生创新创业训练计划项目立项申报]
- html超链接块状,超链接伪类
- 一阶广义差分模型_计量经济学习题第5章 自相关性
- lol服务器维护2021,lol维护公告最新时间2021什么时候结束 11.11版本5月27日更新内容介绍...
- 华南师范大学计算机学院官网,朱佳(华南师范大学计算机学院研究员)_百度百科...
- UE4中修改模型mesh资源的枢轴坐标原点位置
- 解决问题最简单的方法
- Transformer-Bert 学习笔记(一)
热门文章
- Geodetic集合(c++)
- 我研究了一个月阿里的岗位JD。。。
- hbw-utils - guava基本数据类型工具类常用方法的整理
- linux系统如何为软件升级,在Linux系统中怎样才能使用一个命令升级所有软件?...
- 风控策略和模型的区别_风控策略
- ios9 网络请求出错The resource could not be loaded becaus
- devexpress gridcontrol gridview小结
- 电子学会青少年等级考试C语言(二级)
- 阿朱离职京东,重返中国企业服务界
- Redhat Openshift云平台注册使用