题目描述
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:3
示例 2:
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:5
解题代码
层序遍历解法
public int maxDepth(Node root) {
//等于null直接返回
if(root == null)
return 0;
//只有一个根节点
if(root.children.size() == 0)
return 1;
//深度
int depth = 0;
//定义一个队列存储节点
Queue<Node> queue = new LinkedList<Node>();
queue.add(root);
while(!queue.isEmpty()){
int count = queue.size();
depth++;
while(count > 0){
//队列头节点出栈
Node node = queue.poll();
if(node.children.size() != 0)
//将一个集合添加到另一个集合
queue.addAll(node.children);
//该层的节点数减一
count--;
}
}
return depth;
}
递归调用解法
public int maxDepth(Node root) {
int capacity=0;
if (root==null){
return 0;
}else if (root.children==null){
return 1;
}else {
Queue<Node> queue = new LinkedList<>();
queue.add(root);
return method2(queue,++capacity);
}
}
public int method2(Queue<Node> queue,int capacity){
if (queue.isEmpty()){
return capacity;
}else{
int count=queue.size();
while (count>0){
List<Node> children = queue.poll().children;
queue.addAll(children);
}
return method2(queue,++capacity);
}
}