此题和二叉树最大深度差不多
题目链接
https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/
一、题目
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
输入: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
二、代码
代码如下(示例):
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int min(int a,int b)
{
return a-b<0?a:b;
}
int minDepth(struct TreeNode* root){
if(root == NULL) return 0; //空树深度为0
if(root -> left == NULL && root -> right == NULL) return 1; //左右子树为空,深度为1
//根据题意,若一颗子树为空,则最小深度为非空子树的最小深度加一
if(root -> left == NULL && root -> right != NULL)
return minDepth(root -> right) + 1;
if(root -> left != NULL && root -> right == NULL)
return minDepth(root -> left) + 1;
//若两颗子树都非空,则最小深度为左右子树最小深度较小者加一
return min(minDepth(root -> left), minDepth(root -> right)) + 1;
}