这个题目第一次看到当然很简单,求这种层数最基本的思路就是广度优先遍历了,思路简单,代码也不难。只是在设计队列的时候要注意里面要存放的是怎样的数据:
public int maxDepth(Node root) {
if (root == null)
return 0;
int result = 0;
//队列存放当前的节点和节点所处的层数
Queue<Pair<Node, Integer>> queue = new LinkedList<>();
queue.add(new Pair<Node, Integer>(root, 1));
while (!queue.isEmpty()) {
Pair<Node, Integer> cur = queue.remove();
Node curNode = cur.getKey();
int curLevel = cur.getValue();
result = curLevel;
for (Node child : curNode.children) {
queue.add(new Pair<Node, Integer>(child, curLevel+1));
}
}
return result;
}
主要想说的是还有一种深度优先的思路,这个是自己从来没有认真去想的,所以想在这里做个记录。深度优先的思路就是顺着每一个子节点走下去,走到头(叶子节点)的时候就返回0,否则就返回当前深度加1。这样到最后根节点汇聚,并求得了沿着每个路径走下去的最大值,得出结果,代码如下:
public int maxDepth(Node root) {
//根节点则返回0
if(root == null)
return 0;
int depth = 0;
//求每个子树的深度
for(int i = 0;i<root.children.size();i++){
depth = Math.max(depth,maxDepth(root.children.get(i)));
}
//返回子树深度+1
return depth+1;
}