题目描述:
给定一个二叉树,找出其最小深度。
样例:
给出一棵如下的二叉树:
1
/ \
2 3
/ \
4 5
这个二叉树的最小深度为 2
做题思路:
如果根结点为空,返回0,若左子树为空,就用递归函数遍历右子树并加1,返回记录深度,如果右子树为空,就遍历左子树,递归返回记录深度,若两者都不为空,就先遍历左子树,再遍历右子树,返回记录深度,比较深度大小,返回小的值。
关键代码:
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;
if(root->left==NULL)
{ return minDepth(root->right)+1;}
if(root->right==NULL)
{ return minDepth(root->left)+1;}
int l=minDepth(root->left);
int r=minDepth(root->right);
int s=min(l,r)+1;
return s;
}
};
做题感受:没有查答案并且自己写的时候忽略了一个问题,如果遍历的时候左子树为空而右子树不为空的情况,和右子树为空而左子树不为空的情况,测试数据的时候,网站用了一个根节点没有左孩子的树来测试,返回的是0,而不是正常的最小深度,就填上了判断是否为空的语句。