问题:二叉树的最大深度
解题思路
采用递归的思路,如果root为NULL,返回0,否则返回1+max{左子树深度,右子树深度}
C++代码
/**
* 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 maxDepth(TreeNode* root) {
//如果root为NULL,返回0,否则返回1+max{左子树深度,右子树深度}
return root ? 1+max(maxDepth(root->left), maxDepth(root->right)) : 0;
}
};
问题:二叉树的最小深度
解题思路
采用递归的思想,注意单分支的处理
C++代码
/**
* 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;//空树情况
int d1 = minDepth(root->left);
int d2 = minDepth(root->right);
if(root->left && root->right) //左右孩子都在
return 1 + min(d1, d2);
else if(!root->left && !root->right)//root是叶节点
return 1;
else//只有一个分支,d1 = 0 或者 d2 = 0
return 1 + d1 + d2;
}
};