二叉树的最大深度,最小深度两种解法(C++)

二叉树的最大深度,最小深度两种解法(C++)_第1张图片

  

 ✨欢迎来到脑子不好的小菜鸟的文章✨

      创作不易,麻烦点点赞哦

          所属专栏:刷题  

          我的主页:脑子不好的小菜鸟

          文章特点:关键点和步骤讲解放在

          代码相应位置

前言:

若想看更详细的二叉树相关题目,请移步:二叉树经典题题解(超全题目)(力扣)-CSDN博客 

 104. 二叉树的最大深度

https://leetcode.cn/problems/maximum-depth-of-binary-tree/

法一:迭代法:

104. 二叉树的最大深度
/*使用迭代法的话,使用层序遍历是最为合适的,因为最大的深度就是二叉树的层数,和层序遍历的方式极其吻合。

在二叉树中,一层一层的来遍历二叉树,记录一下遍历的层数就是二叉树的深度*/



/*法一:迭代法*/
class Solution {
public:
    int maxDepth(TreeNode* root) 
    {
        int deepth=0;
        queueque;
        int size;
        if(root==NULL)
        return 0;

        TreeNode* cur=root;
        que.push(cur);

        while(!que.empty())
        {
            size=que.size();
            deepth++;
            while (size--)
            {
                cur = que.front();
                que.pop();

                if(cur->left)   que.push(cur->left);
                if(cur->right)  que.push(cur->right);
            }
        }
        return deepth;
    }
};

法二:后序遍历

/*后序遍历:虽然求的是高度,但是高度就等于最大深度*/
class Solution {
public:
    int getHeight(TreeNode* cur)
    {
        if(cur==NULL)   return 0;

        int heightl=0,heightr=0,heightsum;

        heightl = getHeight(cur->left);
        heightr = getHeight(cur->right);
        heightsum=max(heightl,heightr)+1;

        return heightsum;
    }

    int maxDepth(TreeNode* root) 
    {
        return getHeight(root);
    }
};

111. 二叉树的最小深度

https://leetcode.cn/problems/minimum-depth-of-binary-tree/

法一:迭代法
 


/*法一:迭代法*/
//最先左右孩子都为空的层数为最小深度

class Solution {
public:
    int minDepth(TreeNode* root) 
    {
        int deepth=0;
        queueque;
        TreeNode* cur=root;
        int size;

        if(root==NULL)
        return 0;

        que.push(cur);

        while(!que.empty())
        {
            size = que.size();
            deepth++;
            while(size--)
            {
                cur=que.front();
                que.pop();

                if(cur->left)   que.push(cur->left);
                if(cur->right)  que.push(cur->right);

                /*注意是放在while(size--)里面*/
                if(cur->left==NULL&&cur->right==NULL)
                    return deepth;
            }
        }
        
        return deepth;
    }
};


法二:后序遍历

/*法二:后序遍历*/
//最小深度是从根节点到最近叶子节点的最短路径上的节点数量。,注意是叶子节点。左右孩子都为空的节点才是叶子节点

//如果左节点为空,右节点不为空,就return 1+右节点
//    右         左                      左
//else return 1+min(heightl,heightr)

class Solution {
public:
    int getHeithmin(TreeNode* cur)
    {
        if(cur==NULL)   return 0;

        int heightl,heightr;
        //后序遍历
        heightl = getHeithmin(cur->left);
        heightr = getHeithmin(cur->right);

        if(cur->left==NULL&&cur->right!=NULL) return 1+heightr;
        else if(cur->left!=NULL&&cur->right==NULL)  return 1+heightl;
        else return 1+min(heightl,heightr);
    }

    int minDepth(TreeNode* root) 
    {
        return getHeithmin(root);
    }
};

你可能感兴趣的:(刷题,c++,c语言,算法)