思路
二叉树的最大和最小深度其实是一类问题,都可以用广度优先算法解决。我们可以在遍历的时候加入一个变量记录层级:
- 当在循环过程中发现某个节点的左右子节点都为空,那它就是一个叶子节点,即可结束遍历,当前的层级数就是需要的最小深度
- 当全部遍历完毕,此时的层级数即为最大深度
代码
这里将最大最小合并在一起写了,分别打印出来。
class Solution {
public static void depth(Node root) {
if (root != null) {
LinkedList<Node> queue = new LinkedList();
int level = 0;
int minLevel = 0;
queue.add(root);
while (!queue.isEmpty()) {
level++;
int size = queue.size();
for (int i = 0; i < size; i++) {
Node current = queue.poll();
if (current.left == null && current.right == null && minLevel == 0) {
minLevel = level;
}
if (current.left != null) queue.add(current.left);
if (current.right != null) queue.add(current.right);
}
}
System.out.println("最小深度为:" + minLevel);
System.out.println("最大深度为:" + level);
}
}
}