给定一个二叉树,找出其最小深度(最小深度是从根节点到最近叶子节点的最短路径上的节点数量)
示例:
二叉树树形如下:
7
/ \
9 6
/ \
15 8
它的最小深度为2.
typedef struct TreeNode
{
int val;
struct TreeNode *left;
struct TreeNode *right;
}
int minDepth(TreeNode* root)
{
TreeNode* p;
TreeNode* q[maxsize]; //maxsize为宏定义的足够大的数
int front=-1,rear=-1;
int last=0,d=0,min=maxsize;
if(root==NULL)
return d;
q[++rear]=root;
while(front!=rear)
{
p=q[++front];
if(p->left==NULL&&p->right==NULL) //为叶子结点
return d+1; //层次遍历的第一个叶子结点即最小深度
//if(min>d+1) //最小深度大于当前叶子结点所处深度
// min=d+1; //记录最小深度
if(p->left)
q[++rear]=p->left;
if(p->right)
q[++rear]=p->right;
if(front==last)
{
++d; //当前树的深度加1
last=rear;
}
}
return min;
}