Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
DFS:
int minDepth(TreeNode *root) {
if (root == NULL)
return 0;
if (root->left == NULL && root->right == NULL)
return 1;
if (root->left == NULL)
return minDepth(root->right)+1;
if (root->right == NULL)
return minDepth(root->left)+1;
int left = minDepth(root->left);
int right = minDepth(root->right);
return min(left+1, right+1);
}
int min(int a, int b){
return a<b?a:b;
}
BFS:
int minDepth(TreeNode *root) {
if (root == NULL)
return 0;
std::vector<TreeNode*> vec;
vec.push_back(root);
int depth = 1;
int cur = 0;
int size = vec.size();
while(!vec.empty()){
if (cur == size){
size = vec.size();
++depth;
}
if (vec[cur]->left == NULL && vec[cur]->right == NULL)
return depth;
if (vec[cur]->left != NULL)
vec.push_back(vec[cur]->left);
if (vec[cur]->right != NULL)
vec.push_back(vec[cur]->right);
++cur;
}
return depth;
}
BFS空间复杂度可进一步优化。