[LeetCode Hot 100] LeetCode111. 二叉树的最小深度
题目描述
思路
二叉树的最小深度就是第一个叶子节点所在的层数
方法一:前序遍历(递归、dfs)
/**
* 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 {
private int res = Integer.MAX_VALUE;
public int minDepth(TreeNode root) {
if(root == null) return 0;
dfs(root, 1);
return res;
}
private void dfs(TreeNode node, int level) {
if (node == null) return;
if (node.left == null && node.right == null) {
res = Math.min(res, level);
// 这里return可以写也可以不写,写的话相当于剪枝效果。
return;
}
dfs(node.left, level + 1);
dfs(node.right, level + 1);
}
}
方法二:层序遍历(bfs)
/**
* 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) {
Deque<TreeNode> queue = new ArrayDeque<>();
if (root == null) return 0;
queue.offer(root);
int level = 1;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i ++) {
TreeNode node = queue.poll();
if (node.left != null) queue.offer(node.left);
if (node.right != null) queue.offer(node.right);
// 二叉树的最小深度就是第一个叶子节点所在的层数
if (node.left == null && node.right == null) {
return level;
}
}
level += 1;
}
// 代码不会走到这里
throw new RuntimeException("Error!!!");
}
}
本文作者:Ac_c0mpany丶
本文链接:https://www.cnblogs.com/keyongkang/p/17931124.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步