559. N 叉树的最大深度
难度:简单
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
思路
n叉树的最大深度与2叉树的最大深度其实就是一个问题,只不过对于2叉树来说可以直接写完它的子节点(左节点和右节点),n叉树来说需要使用一个循环去进行遍历子节点,可以先参考使用递归法和迭代法求二叉树的最大深度_Qlz的博客-CSDN博客搞明白求二叉树的最大深度后再来思考这个。
本文使用两种方法分别解决该问题
- 递归法
- 迭代法
package cn.edu.xjtu.carlWay.tree.nAryTreeMaxDepth;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
/**
* 559. N 叉树的最大深度
* 给定一个 N 叉树,找到其最大深度。
* <p>
* 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
* <p>
* N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)
* <p>
* https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/
*/
public class Solution {
/**
* 递归法
*
* @param root
* @return
*/
public int maxDepth(Node root) {
if (root == null) {
return 0;
}
if (root.children.size() == 0) {
return 1;
}
int maximumDepth = 0;
for (Node node : root.children) {
maximumDepth = Math.max(maximumDepth, maxDepth(node));
}
return maximumDepth + 1;
}
/**
* 迭代法
*
* @param root
* @return
*/
public int maxDepth1(Node root) {
if (root == null) {
return 0;
}
Deque<Node> deque = new LinkedList<>();
deque.addLast(root);
int depth = 0;
while (!deque.isEmpty()) {
int size = deque.size();
while (size > 0) {
Node node = deque.removeFirst();
for (Node cNode : node.children) {
deque.addLast(cNode);
}
size--;
}
depth++;
}
return depth;
}
}
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;
}
};