
做题思路:递归解决
#define MAX 10000
int minDepth(struct TreeNode* root){
if(!root)
return 0;
if(!root->left && !root->right)
return 1;
int left = MAX;
int right = MAX;
if(root->left)
left = minDepth(root->left);
if(root->right)
right = minDepth(root->right);
return left < right ? left+1 : right+1;
}

官方思路:递归解决
当结点只有一个子树时,最小路径为子树深度+1。若有两颗子树,则为较小子树的深度
1.递归结束条件:传入结点为NULL
2.若结点只有一个子树,返回那颗子树的深度
3.否则返回两颗子树深度较小的那个
int minDepth(struct TreeNode* root){
if(!root)
return 0;
int left = minDepth(root->left);
int right = minDepth(root->right);
//当只有左子树时
if(left && !right)
return 1+left;
//当只有右子树时
if(!left && right)
return 1+right;
//当左右孩子都存在时
return (left < right ? left : right)+1;
}

解题思路2:用队列迭代层序遍历解决
1.一层一层将二叉树入队
2.若本层有叶子结点,就返回深度
int minDepth(struct TreeNode* root){
if(!root)
return 0;
struct TreeNode* queue[3000];
int queue_front = 0;
int queue_rear = 0;
queue[queue_rear++] = root;
int depth = 0;
int levelLength = 0;
while(levelLength = (queue_rear - queue_front)) {
depth++;
int i = 0;
for(i = 0; i < levelLength; i++) {
struct TreeNode* temp = queue[queue_front++];
if(temp->left)
queue[queue_rear++] = temp->left;
if(temp->right)
queue[queue_rear++] = temp->right;
if(!temp->right && !temp->left)
return depth;
}
}
return -1;
}
