一、题意
二、思路
这道题和之前求得 《104.二叉树的最大深度》
不同,不同在逻辑处理上。注意这里的概念, **最小深度:**最是从根节点到最近叶子节点的最短路径上的节点数量。
2.1递归法
同样是三部曲:
class Solution { public: //1.确定函数参数和返回值 int getDepth(TreeNode *node) { if(node==NULL) return 0;//2.判断终止条件 //3.确定单层递归逻辑: int leftDepth=getDepth(node->left);//左 int rightDepth=getDepth(node->right);//右 /* 核心思路: 所以,如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1 。 */ //当左子树为空,右子树不为空,并不是最大深度 if(node->left==NULL&&node->right!=NULL) { return 1+rightDepth; } if(node->left!=NULL&&node->right==NULL) { return 1+leftDepth; } int result=1+min(leftDepth,rightDepth); return result; } int minDepth(TreeNode* root) { return getDepth(root); } };
核心思路:
所以,如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1 。
,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1 。**