Given a binary tree, find its minimum depth.
Theminimumdepthisthenumberofnodesalongtheshortestpathfromtherootnodedowntothenearest
Theminimumdepthisthenumberofnodesalongtheshortestpathfromtherootnodedowntothenearest
leaf node.
思路:
第一种情况,为空。返回0;
第二种情况,只有一个节点。返回1;
第三种情况,只有一个孩子的节点。返回有孩子这边的深度。
第四个情况,有两个孩子的节点。返回是深度小的那个。
#include <iostream>
using namespace std;
struct TreeNode
{
int data;
TreeNode *left;
TreeNode *right;
TreeNode(int x):data(x),left(NULL),right(NULL) {}
};
class solution
{
public:
int minDepth(TreeNode *root)
{
if(root == NULL) return 0;
if(root->left == NULL && root->right == NULL) return 1;
int result = INT_MAX;
if(root->left != NULL)
result = minDepth(root->left)+1;
if(root->right != NULL)
result = min(result,minDepth(root->right)+1);
return result;
}
};
//创建一个二叉树
void buildTree2(TreeNode **T)
{
int ch;
cin>>ch;
if(ch == 0)
{
*T = NULL;
}
else
{
*T = new TreeNode(ch);
printf("请输入%d的左孩子:",ch);
buildTree2(&((*T)->left));
printf("请输入%d的右孩子:",ch);
buildTree2(&((*T)->right));
}
}
void main()
{
TreeNode *root;
buildTree2(&root);
solution *sol = new solution;
int len = sol->minDepth(root);
printf("The min depth of tree is:%d.\n",len);
delete sol;
}