一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情。
一、题目描述
原文链接:104. 二叉树的最大深度
具体描述:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \\
9 20
/ \\
15 7
返回它的最大深度 3 。
二、思路分析
说白啦,还是二叉数的层次遍历!不需要遍历节点,只需要记录最大层数,也就是最后一层!
顺便我们复习二叉数的层次遍历思路:
-
定义一个队列来进行存储二叉数,首次把root添加到树当中
-
每次根据根据队列的当前长度来遍历队列,存储结果,顺待把当前节点的左右孩子添加到队列当中
-
循环第二步,直到队列为空!
三、AC代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
int result = 0;
Queue<TreeNode> queue = new LinkedList<>();
if (root != null) queue.offer(root);
while (!queue.isEmpty()){
int levelLen = queue.size();
while (levelLen > 0){
TreeNode tmpNode = queue.poll();
if (tmpNode.left != null) queue.offer(tmpNode.left);
if (tmpNode.right != null) queue.offer(tmpNode.right);
levelLen--;
}
result++;
}
return result;
}
}
四、总结
- 二叉数的层次遍历!
五、巩固练习
111. 二叉树的最小深度(需要注意的是当该节点的左右孩子多是null的的时候才是最小深度!)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int minDepth(TreeNode root) {
int result = 0;
Queue<TreeNode> queue = new LinkedList<>();
if (root != null) queue.offer(root);
while (!queue.isEmpty()){
int levelLen = queue.size();
while (levelLen > 0){
TreeNode tmeNode = queue.poll();
if (tmeNode.left != null) queue.offer(tmeNode.left);
if (tmeNode.right != null) queue.offer(tmeNode.right);
if (tmeNode.left == null && tmeNode.right == null) return result + 1;
levelLen--;
}
result++;
}
return result;
}
}
感谢大家的阅读,我是Alson_Code,一个喜欢把简单问题复杂化,把复杂问题简单化的程序猿! ❤