给定一个二叉树,找出其最小深度。
二叉树的最小深度为根节点到最近叶子节点的距离。
样例
给出一棵如下的二叉树:
1
/ \
2 3
/ \
4 5
这个二叉树的最小深度为 2
最小深度不同于最大深度,最小深度要考虑:
1:root为空,minDepth = 0;
2: root不为空,但左右节点都为空,及就一个根结点,则minDepth = 1;
3: root不为空,但左右几点有一个为空,如左节点为空,右节点不为空,则minDepth = 右节点minDepth + 1,同理minDepth = 左节点minDepth + 1
4: root不为空,但左右节点也都不为空,则minDepth = min(左节点最小深度,右节点最小深度);
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/*
* @param root: The root of binary tree
* @return: An integer
*/
int minDepth(TreeNode * root) {
// write your code here
if(root == NULL)
return 0;
else if(root->left == NULL && root->right != NULL)
{
return minDepth(root->right) + 1;
}
else if(root->left != NULL && root->right == NULL)
{
return minDepth(root->left) + 1;
}
else if(root->left == NULL && root->right == NULL)
{
return 1;
}
else if (root->left != NULL && root->right != NULL)
{
int left_length = minDepth(root->left) + 1;
int right_lenght = minDepth(root->right) + 1;
return min(left_length,right_lenght);
}
}
};