文章目录
- 题目描述
- 层序遍历解法
- 递归解法
题目描述
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 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;}
}