二叉树的最大深度
二叉树的最大深度就是根节点到叶子节点的最大路径。我们采用后序遍历的方式,对于左子树求得最大深度,右子树最大深度。我们要取最大的因此就是max(left,right),再加1是因为return的时候带上本身的root节点因此要加个自己也就是+1.
class Solution {
public:
int run(TreeNode *root) {
if(root == NULL)
return 0;
int left = run(root->left);
int right = run(root->right);
return max(left,right)+1;
}
};
二叉树的最小深度
对于二叉树的最小深度,一个直观的认为就是直接将最大深度max改为min就好了,但是这样是错误的,因为假设一个只有两个节点的树,一个根节点,一个在根节点的左边,那么如果是单纯使用min(left,right)+1 最终答案为1,但是显然是错误的,答案因该是2. 所以分成三种情况来讨论。
1.左子树为0,右子树不为0
2.左子树不为0,右子树为0
我们都要取最大的也就是max(left,right)+1
3.如果左右子树都不为0
我们使用min(left,right)+1。
class Solution {
public:
int run(TreeNode *root) {
if(root == NULL)
return 0;
int left = run(root->left);
int right = run(root->right);
if(left == 0 || right == 0)
return max(left,right)+1;
return min(left,right)+1;
}
};