1 题目描述
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
例如,给定一个 3叉树 :
我们应返回其最大深度,3。
说明:
树的深度不会超过 1000。
树的节点总不会超过 5000。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处
2 解题思路
- 方法一 递归
递归终止条件:root==null时,返回0
每层递归需要做的事情:分别求出当前节点子节点的最大深度,然后求出其最大值,最大值+1即为最大深度
- 方法二 迭代
层序遍历,遍历时记录层数即可
3 解决代码
- 方法一 递归
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public int maxDepth(Node root) {
if (root == null) return 0;
//求出每个子树的最大深度
int max = 0;
for (Node node : root.children){
int depth = maxDepth(node);
max = Math.max(max,depth);
}
//最大值+1 就是树的最大深度
return max+1;
}
}
- 方法二 迭代
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public int maxDepth(Node root) {
if(root == null){
return 0;
}
//迭代:层序遍历
Queue<Node> queue = new LinkedList<>();
queue.add(root);
int maxDepth =0;
while(!queue.isEmpty()){
int count = queue.size();
maxDepth++;
while(count > 0){
count--;
//poll //返回第一个元素,并在队列中删除
Node cur = queue.poll();
for(Node node:cur.children){
if(node != null)
queue.add(node);
}
}
}
return maxDepth;
}
}