C++ 二叉树的最大深度,最小深度 递归解法

二叉树的最大深度

二叉树的最大深度就是根节点到叶子节点的最大路径。我们采用后序遍历的方式,对于左子树求得最大深度,右子树最大深度。我们要取最大的因此就是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;       
            
    }
};
原创文章 28 获赞 34 访问量 2989

猜你喜欢

转载自blog.csdn.net/weixin_42134034/article/details/105680931
今日推荐