题目描述:
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
来源:力扣(LeetCode)
思路:子节点是以 列表的形式存储!
迭代容易理解,层序遍历就好,但是耗时长;
递归就是分别拿到每个子树中的最大深度,递归进去!
代码:
递归和迭代两种方式:
class Solution {
public int maxDepth(Node root) {
//1.迭代
if(root == null) return 0;
LinkedList<Node> queue = new LinkedList<>();
queue.add(root);
int depth = 0;
while(!queue.isEmpty()){
//只要进来,深度就加一
depth++;
int size = queue.size();
for(int i = 0;i < size;i++){
Node node = queue.remove();
//此时该节点的子节点是 链表存储的多个内容
queue.addAll(node.children);
}
}
return depth;
//2.递归
if(root == null) return 0;
else{
//拿到他所有子树的最大高度!
//注意最大深度的声明位置!递归每次都不同!每个方法栈中都不同
int maxDepth = 0;
for(Node child : root.children){
maxDepth = Math.max(maxDepth,maxDepth(child));
}
return maxDepth + 1;
}
}
}