Algorithm/src/main/java/tree/MaxDepth.java

60 lines
1.6 KiB
Java
Raw Normal View History

2025-03-18 12:34:17 +08:00
package tree;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;
/**
* 题目 104. 二叉树的最大深度 (maxDepth)
* 描述给定一个二叉树 root 返回其最大深度
* 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数
* 链接https://leetcode.cn/problems/maximum-depth-of-binary-tree/
*/
2025-06-30 16:55:09 +08:00
//二刷会做
2025-03-18 12:34:17 +08:00
public class MaxDepth {
//递归
int dfs(TreeNode root){
if(root==null)
return 0;
return Integer.max(dfs(root.left),dfs(root.right))+1;
}
public int maxDepth1(TreeNode root) {
return dfs(root);
}
2025-06-30 16:55:09 +08:00
2025-03-18 12:34:17 +08:00
//bfs
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int depth = 0;
// 每次while循环处理一层节点
while (!queue.isEmpty()) {
int levelSize = queue.size(); // 当前层节点数量
// 遍历当前层所有节点
for (int i = 0; i < levelSize; i++) {
TreeNode node = queue.poll();
// 如果存在左子节点,则加入队列
if (node.left != null) {
queue.offer(node.left);
}
// 如果存在右子节点,则加入队列
if (node.right != null) {
queue.offer(node.right);
}
}
// 每处理完一层深度加1
depth++;
}
return depth;
}
}