题目:
给定一个二叉树,找出其最小深度。
给出一棵如下的二叉树:
1
/ \
2 3
/ \
4 5
这个二叉树的最小深度为 2
如果root为叶子,就返回num+1,否则当左右子树不为空时,进行递归,并根据情况,返回哪个值。
代码:
/**
* 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 num=0;
int minDepth(TreeNode *root) {
// write your code here
/*int lheight=0,rheight=0;
if(root==NULL) return 0;
lheight=minDepth(root->left);
rheight=minDepth(root->right);
if(lheight>rheight&&rheight!=0) return rheight+1;
else if(lheight<=rheight&&lheight!=0) return lheight+1;
else return 1;*/
//else if(root->left==NULL&&root->right==NULL) return 1;
int num=0,m,t;
if(root==NULL) return 0;
if(root->right==NULL&&root->left==NULL)
{ return num+1;}
else { if(root->right!=NULL) { m=minDepth(root->right);m++;}
if(root->left!=NULL) { t=minDepth(root->left);t++;}
//num++;
if(root->right!=NULL&&root->left==NULL) return m;
if(root->right==NULL&&root->left!=NULL) return t;
else { if(m<t) return m;
else return t;
}
}
}
};
感想:
这道题我一开始想模仿高度那个题来写,可是写到一半发现需要判断的情况太多了,就又重新写了这个,这个算法里返回m还是返回t也是个细节问题。