问题描述
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
解题思路
还是递归,我现在越发的觉得递归的思想真的很好理解,代码如下,按照注释就是口头实现的过程:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int minDepth(TreeNode* root) {
if(root==nullptr) //如果这棵树是空的,直接返回0
return 0;
if(root->left==nullptr&&root->right==nullptr)//如果左右子树都为空说明该节点是叶子节点
return 1;//则返回1
if(root->left==nullptr)//如果左子树为空,说明右子树不为空
return minDepth(root->right)+1;//则返回右子树的最小高度
if(root->right==nullptr)//如果右子树为空,说明左子树不为空
return minDepth(root->left)+1;//则返回左子树的最小高度
return min(minDepth(root->left),minDepth(root->right))+1;//到这一步说明左右子树都不为空,则返回其中最小的一个
}
};
心得
今天是刷题第十一天,基本每天做一道简单的题并记录下来,最大的进步就是递归用的更熟练些了吧。不过还有很多不足,比如刷的题题目类型单一、解题思路单一等等,但我给自己这个阶段定的目标是养成每天刷题并记录的习惯,所以无论怎样每天也至少要抽时间做一道题,也必须记录下来。等度过考试周就开始潜心修炼!冲!