题目描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例: 给定二叉树 [3,9,20,null,null,15,7],
3
/ 9 20 / 15 7 返回它的最大深度 3 。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
递归
private static int maxDepth(TreeNode root
) {
if (root
== null
) {
return 0;
}
int leftMaxDepth
= maxDepth(root
.left
);
int rightMaxDepth
= maxDepth(root
.right
);
return Math
.max(leftMaxDepth
, rightMaxDepth
) + 1;
}
迭代
BFS层次遍历思想
private static int maxDepth1(TreeNode root
) {
if (root
== null
) {
return 0;
}
LinkedList
<TreeNode> queue
= new LinkedList<>();
queue
.add(root
);
int maxDepth
= 0;
while (!queue
.isEmpty()) {
maxDepth
++;
int levelSize
= queue
.size();
for (int i
= 0; i
< levelSize
; i
++) {
TreeNode node
= queue
.pollFirst();
if (node
.left
!= null
) {
queue
.add(node
.left
);
}
if (node
.right
!= null
) {
queue
.add(node
.right
);
}
}
}
return maxDepth
;
}
DFS前序遍历思想
private static int maxDepth2(TreeNode root
) {
if (root
== null
) {
return 0;
}
LinkedList
<Pair
<TreeNode, Integer>> stack
= new LinkedList<>();
stack
.push(new Pair<>(root
, 1));
int maxDepth
= 0;
while (!stack
.isEmpty()) {
Pair
<TreeNode, Integer> pair
= stack
.pop();
TreeNode node
= pair
.first
;
maxDepth
= Math
.max(maxDepth
, pair
.second
);
int curDepth
= pair
.second
;
if (node
.right
!= null
) {
stack
.push(new Pair<>(node
.right
, curDepth
+ 1));
}
if (node
.left
!= null
) {
stack
.push(new Pair<>(node
.left
, curDepth
+ 1));
}
}
return maxDepth
;
}