题目描述
求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
思路简析: 递归遍历整棵树,注意节点的类型讨论:
- 根节点:空树返回0,只有根节点返回1
- 有一个孩子的节点:选择唯一的子树
- 有两个孩子的节点:选择到达叶子结点距离较小的子树
- 叶子结点:返回值为1
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int run(TreeNode* root) {
// write code here
if(root==nullptr)//节点为空
{
return 0;
}
int temp1,temp2;
if(root->left==nullptr&&root->right==nullptr)//叶子结点
{
return 1;
}
else if(root->left!=nullptr&&root->right!=nullptr)//有两个子树的节点
{
temp1=run(root->left);
temp2=run(root->right);
return temp1>temp2?temp2+1:temp1+1;
}
else//只有一颗子树的节点
{
temp1=run(root->left);
temp2=run(root->right);
return temp1>temp2?temp1+1:temp2+1;
}
}
};