【每日算法】LeetCode 111 —— 二叉树最小深度(二百零三)

题目内容

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

示例

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

提示

1、树中节点数的范围在 [0, 10^5] 内
2、-1000 <= Node.val <= 1000

题解

本题求二叉树的最小深度,这里可以采用类似递归的思路求解。具体思考如下:

对于每一个节点来说,

1、如果其没有左右儿子,则说明该节点是叶子节点,因此以该点作为根的子树的深度为1

2、若其存在儿子,那么有以下三种情况:

(1)存在左儿子,不存在右儿子,则深度为左儿子的深度+1

(2)存在右儿子,不存在左儿子,则深度为右儿子的深度+1

(3)左右儿子均存在,则深度为min(左儿子深度,右儿子深度)+1

最后,返回根节点的深度。

注意:通过节点的层次定义二叉树的深度,且狭义上指的是最大的深度,根为第一层,树中结点的最大层次就为树的深度或者高度。如果树只有一个结点,则深度为1,如果根节点只有左子树没有右子树,输的深度就是左子树的深度+1;反之为右子树的深度+1。如果既存在左子树也存在右子树,则就是左右子树深度的较大值+1。本题由于题目要求求较小的深度,因此在处理的时候,就需要用较小的子树深度。

代码

/**
* 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) {
//空节点
if(root == null) return 0;
//叶子节点
if(root.left == null && root.right == null) return 1;
//非叶非空节点
if(root.left!=null && root.right!=null) return Math.min(minDepth(root.left),minDepth(root.right))+1;
if(root.left !=null) return minDepth(root.left)+1;
return minDepth(root.right)+1;
}
}
Author: Frederic Niu
Link: https://www.fredericniu.cn/2021/07/28/【每日算法】LeetCode-111-——-二叉树最小深度(二百零三)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
我的公众号