求二叉树的最小深度
思路还是一如继往的递归,但不能简单地像求最大深度一样,求左、右递归函数返回值的最小值
因为这样简单地操作,可能会把只有一个孩子的结点当作叶结点来处理
因此有必要进行分类讨论:
1.当当前结点为空时,返回0
2.当当前结点为叶结点(左右孩子均为空)时,返回1
3.当当前结点只有左(右)孩子非空时,返回左(右)孩子的最小深度值+1
4.当当前结点左右孩子都有时,返回它们最小深度的最小值+1
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int minDepth(TreeNode* root) {
if(!root) return 0;
if(!root->left && !root->right) return 1;
if(!root->left) return minDepth(root->right)+1;
if(!root->right) return minDepth(root->left)+1;
return min(minDepth(root->left),minDepth(root->right))+1;
}
};