Skip to content

Commit ccf94e6

Browse files
committed
给定一个二叉树,找出其最大深度
1 parent 3546d8d commit ccf94e6

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.algorithm.study.demo.algorithm.leetcode;
2+
3+
import java.util.LinkedList;
4+
import java.util.Queue;
5+
6+
/**
7+
给定一个二叉树,找出其最大深度。
8+
*
9+
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
10+
*
11+
说明: 叶子节点是指没有子节点的节点。
12+
*
13+
示例:
14+
给定二叉树 [3,9,20,null,null,15,7],
15+
*
16+
3
17+
/ \
18+
9 20
19+
/ \
20+
15 7
21+
返回它的最大深度 3 。
22+
*
23+
来源:力扣(LeetCode)
24+
链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree
25+
*/
26+
public class Solution18 {
27+
public static class TreeNode {
28+
int val;
29+
TreeNode left;
30+
TreeNode right;
31+
TreeNode(int x) { val = x; }
32+
}
33+
34+
/**
35+
* 我们的想法是使用 DFS(深度优先搜索) 策略访问每个结点,同时在每次访问时更新最大深度。
36+
* 利用队列的方式访问树,每次遍历树的一层。深度就+1。
37+
* @param root
38+
* @return
39+
*/
40+
public static int maxDepth(TreeNode root) {
41+
if (null==root){
42+
return 0;
43+
}
44+
Queue<TreeNode> queue=new LinkedList<>();
45+
//把当前的第一层添加至队列中
46+
queue.offer(root);
47+
//默认深度为0
48+
int depth=0;
49+
while (queue.size()>0){
50+
//获取当前层的节点数量
51+
int size = queue.size();
52+
//遍历当前层的节点
53+
for (int i = 0; i < size; i++) {
54+
//弹出当前层的节点。获取节点下一层的节点
55+
TreeNode head = queue.poll();
56+
if (head.left!=null){
57+
queue.offer(head.left);
58+
}
59+
if (head.right!=null){
60+
queue.offer(head.right);
61+
}
62+
}
63+
//当前层遍历结束后。树的深度+1
64+
depth++;
65+
}
66+
return depth;
67+
68+
}
69+
public static void main(String[] args) {
70+
TreeNode a=new TreeNode(3);
71+
TreeNode b=new TreeNode(9);
72+
TreeNode c=new TreeNode(20);
73+
TreeNode d=new TreeNode(15);
74+
TreeNode r=new TreeNode(7);
75+
a.left=b;
76+
a.right=c;
77+
c.left=d;
78+
c.right=r;
79+
System.out.println(maxDepth(a));
80+
}
81+
}

0 commit comments

Comments
 (0)