58 lines
1.6 KiB
Java
58 lines
1.6 KiB
Java
|
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/
|
|||
|
|
|||
|
*/
|
|||
|
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);
|
|||
|
}
|
|||
|
//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;
|
|||
|
}
|
|||
|
}
|