方法一:迭代法
int minDepth(struct TreeNode* root){
if(root==NULL)return 0;
struct TreeNode *Nodes[10000];//队列
struct TreeNode *node=root;
int depth=1;
int left=0;//左指针
int right=0;//右指针
Nodes[right++]=root;//right指向最后一个元素的下一个位置
while(left<root){
int layernum=right-left;//本层次有多少个结点
for(int i=0;i<layernum;i++){//遍历本层次的结点
node=Nodes[left++];
if(node->left==NULL&&node->right==NULL)
return depth;
if(node->left!=NULL)
Nodes[right++]=node->left;
if(node->right!=NULL)
Nodes[right++]=node->right;
}
depth++;//遍历完本层次的结点后,高度自增
}
return depth;
}
方法二:递归法
int minDepth(struct TreeNode* root){
if(root==NULL)return 0;
int left=minDepth(root->left);//左子树高度
int right=minDepth(root->right);//右子树高度
if(root->left==NULL||root->right==NULL)
return left+right+1;//若左右子树中有一个为空,则返回非空的子树的高度再加一
else
return left>right?right+1:left+1;//返回左右子树中较高的高度
}