Hot100 - 二叉树的最大深度
最佳思路:
- 采用层序遍历的方法,逐层遍历树的每一层。每遍历完一层,深度增加1。通过使用队列,可以有效地处理二叉树的每一层节点,直到所有节点都被遍历完。层序遍历特别适合求解二叉树的最大深度。
时间复杂度:
- 时间复杂度是 O(n),其中 n 是树中的节点数。每个节点都会被访问一次,因此时间复杂度为 O(n)。
思路解析:
- 层序遍历:我们使用一个队列
queue
来存储当前层的所有节点。每次遍历一层,处理该层的所有节点,并将它们的子节点添加到队列中。这一过程直到所有层都被遍历完为止。 - 队列的使用:队列的
isEmpty()
方法用于判断是否还有节点需要处理。如果队列为空,说明所有节点都已遍历,最大深度即为遍历的层数。 - 深度更新:每遍历完一层,增加深度
res
,直到树中所有层都被访问过。
代码实现:
class Solution {
public int maxDepth(TreeNode root) {
if (root == null) return 0;
List<TreeNode> queue = new ArrayList<>() {{ add(root); }};
List<TreeNode> tmp;
int res = 0;
while (!queue.isEmpty()) {
tmp = new ArrayList<>();
for (TreeNode node : queue) {
if (node.left != null) tmp.add(node.left);
if (node.right != null) tmp.add(node.right);
}
res++;
queue = tmp;
}
return res;
}
}
思路总结:
- 本题采用层序遍历的方式,通过队列逐层处理二叉树的节点,计算树的最大深度。
- 在每一层遍历完后,增加深度计数器,并将当前层的所有子节点加入队列,直到队列为空。最终返回深度计数器
res
的值,即为二叉树的最大深度。