题意描述:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
注意叶子节点是指左右孩子都为空的节点
方法一:递归法
C++代码如下
class Solution {
public:
int getDepth(TreeNode* node){
if(node == NULL){
return 0;
}
int leftDepth = getDepth(node->left);
int rightDepth = getDepth(node->right);
if(node->left == NULL && node->right != NULL){
return 1 + rightDepth;
}
if(node->left != NULL && node->right == NULL){
return 1 + leftDepth;
}
int result = 1 + min(leftDepth, rightDepth);
return result;
}
int minDepth(TreeNode* root) {
return getDepth(root);
}
};
方法二:前序遍历
C++代码如下:
class Solution {
public:
int result;
void getDepth(TreeNode* node, int depth){
if(node->left == NULL && node->right == NULL){
result = min(depth, result);
return ;
}
if(node->left){
getDepth(node->left, depth + 1);
}
if(node->right){
getDepth(node->right, depth + 1);
}
return;
}
int minDepth(TreeNode* root) {
if(root == NULL){
return 0;
}
result = INT_MAX;
getDepth(root, 1);
return result;
}
};
方法三:层序遍历
C++代码如下:
class Solution {
public:
int minDepth(TreeNode* root) {
if(root == NULL){
return 0;
}
int depth = 0;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()){
int size = que.size();
depth++;
for(int i = 0; i < size; i++){
TreeNode* node = que.front();
que.pop();
if(node->left){
que.push(node->left);
}
if(node->right){
que.push(node->right);
}
if(!node->left && !node->right){
return depth;
}
}
}
return depth;
}
};