力扣111 二叉树的最小深度 Java版本
题目描述
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:2
示例 2:
输入:root = [2,null,3,null,4,null,5,null,6]
输出:5
提示:
树中节点数的范围在 [0, 105] 内
-1000 <= Node.val <= 1000
层序遍历解法
class Solution {
//求二叉树的最小深度
public int minDepth(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
if (root==null){
return 0;
}
int depth = 0;
queue.offer(root);
while (!queue.isEmpty()){
depth++;
int size = queue.size();
//这里要单独开一个循环,size就是代表这一层有多少个节点。这样区分层之后可以给depth加一
while (size>0){
TreeNode node = queue.poll();
//如果当前节点为叶子节点,相当于直接找到了最小深度
if (node.left==null&&node.right==null){
return depth;
}
if (node.left!=null){
queue.offer(node.left);
}
if(node.right!=null){
queue.offer(node.right);
}
size--;
}
}
return depth;
}
}
递归解法
class Solution {
//求二叉树的最小深度
public int minDepth(TreeNode root) {
//使用递归的方法来解决
//递归出口
if (root==null){
return 0;
}
//需要判断一下是否只有一个子树。如果当前节点只有一个孩子节点,直接用下面这一行代码的话,并不会沿着路径往下找,会直接返回当前的深度
//return Math.min(minDepth(root.left),minDepth(root.right))+1;
if (root.right==null){
return minDepth(root.left)+1;
}
if (root.left==null){
return minDepth(root.right)+1;
}
//左右子树都不为空
return Math.min(minDepth(root.left),minDepth(root.right))+1;
}
}
原文地址:https://blog.csdn.net/m0_47066863/article/details/136372602
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!