二叉树的最大深度和最小深度(两种方法:递归+迭代)

这篇具有很好参考价值的文章主要介绍了二叉树的最大深度和最小深度(两种方法:递归+迭代)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

二叉树的最大深度:

二叉树的最大深度和最小深度(两种方法:递归+迭代),算法,c++,leetcode,深度优先,广度优先

 文章来源地址https://www.toymoban.com/news/detail-618776.html

class Solution {
public:
    int maxDepth(TreeNode* root) {
        //DFS 深度优先搜索
        if(root==NULL) return 0;
        //深度等于max(左子树的深度,右子树的深度)+1;
        return max(maxDepth(root->left),maxDepth(root->right))+1;



        //BFS 广度优先搜索  借助队列来实现
        queue<TreeNode*> qq;
        qq.push(root);//先将根节点入队
        while(!qq.empty())
        {
            TreeNode* node=qq.front();//保存队头元素
            qq.pop();//删除队头元素
            if(node->left||node->right)//左右子树不同时为空
            {
                len++;//深度+1
                if(node->left==NULL)//左节点为空,说明右节点不为空
                    qq.push(node->right);//右节点入队
                if(node->right==NULL)//同理
                    qq.push(node->left);
            }
        }
        return len;//返回深度
    }
};

二叉树的最小深度:

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

二叉树的最大深度和最小深度(两种方法:递归+迭代),算法,c++,leetcode,深度优先,广度优先

 输入:root = [3,9,20,null,null,15,7]
输出:2

 

//递归
class Solution {
public:
    int minDepth(TreeNode* root) {
        if(root==nullptr) return 0;//根节点为空,直接返回深度为0
        //根节点的左右节点同时为空,深度为1
        if(root->left==nullptr&&root->right==nullptr) return 1;
        int min_depth=INT_MAX;//定义一个最小深度,初始值为最大值
        //递归的找左子树的最小深度
        if(root->left!=nullptr)
        {
            min_depth=min(minDepth(root->left),min_depth);
        }
        //递归的找右子树的最小深度  
        if(root->right!=nullptr)
        {
            min_depth=min(minDepth(root->right),min_depth);
        }
        //返回最小深度,+1是因为一开始没算根节点
        return min_depth+1;
    }
};


//迭代法
//在计算深度的基础上,找最小深度,只需加一个条件:当左右子节点同时为空时,循环结束
class Solution {
public:
    int minDepth(TreeNode* root) {
        if(root==nullptr) return 0;
        queue<TreeNode*> qq;
        qq.push(root);
        int len=1;//根节点已经算上了,最后返回结果就不用再+1了
        while(!qq.empty())
        {
            int size=qq.size();
            while(size)
            {
                TreeNode* node=qq.front();
                qq.pop();
                if(node->left==nullptr && node->right==nullptr)
                {
                    break;
                }
                else
                {
                    if(node->left!=nullptr)
                        qq.push(node->left);
                    if(node->right!=nullptr)
                        qq.push(node->right);
                }   
                size--;
            }
            //判断上面的循环是正常结束,还是非正常结束
            //如果是正常结束size=0,非正常结束说明遇到了左右子节点同时为空的情况,那么就已经找到了最小深度,继续跳出当前的while循环即可。
            if(size!=0)
            {
                break;
            }
            //每遍历完一层,深度+1
            len++;
        }
        return len;
    }
};

到了这里,关于二叉树的最大深度和最小深度(两种方法:递归+迭代)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【深度优先】【广度优先】Leetcode 104 二叉树的最大深度 Leetcode 111 二叉树的最小深度 Leetcode 110 平衡二叉树

    二叉树节点的深度: 指从根节点到该节点的最长简单路径边的条数或者节点数 (取决于深度从0开始还是从1开始) 二叉树节点的高度: 指从该节点到叶子节点的最长简单路径边的条数后者节点数 (取决于高度从0开始还是从1开始) 【前序求的是深度,后序求的是高度】 -

    2024年02月19日
    浏览(52)
  • 代码随想录 Day13 二叉树 LeetCode T104 二叉树的最大深度 T111 二叉树的最小深度 T222完全二叉树的节点个数

    以下题解的更详细思路来自于:代码随想录 (programmercarl.com) 二叉树的高度与深度 这里先补充一下二叉树深度和高度的概念 高度:二叉树中任意一个节点到叶子结点的距离 深度:二叉树中任意一个节点到根节点的距离 下面给出一个图便于理解 获取高度与深度的遍历方式 高度:后

    2024年02月08日
    浏览(41)
  • 算法训练day16Leetcode104二叉树最大深度111二叉树最小深度222完全二叉树的节点个数

    https://www.bilibili.com/video/BV1Gd4y1V75u/?vd_source=8272bd48fee17396a4a1746c256ab0ae 用递归,但是什么顺序没想清楚 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始) 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边

    2024年01月16日
    浏览(44)
  • 有n个结点的平衡二叉树的最小、最大深度,及深度的数量级

    求有n个结点的平衡二叉树的深度范围: 1. 求有n个结点的平衡二叉树的最小深度 显然,n个结点的平衡二叉树深度最小时,前h-1层是满的,只有最下面一层不满。这样的树类似完全二叉树,其高度也可以通过类似求n个结点完全二叉树高度的方法求出。 n个结点的这样的树的深

    2024年02月06日
    浏览(42)
  • 【力扣 - 二叉树的最大深度】

    给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 树中节点的数量在 [0, 10^4] 区间内。 如果我们知道了左子树和右子树的最大深度 l 和 r ,那么该二叉树的最大深度即为 而左子树和右子树的最大深度又可以以

    2024年02月21日
    浏览(36)
  • 每日一练:LeeCode-111. 二叉树的最小深度【二叉树】

    本文是力扣LeeCode-111. 二叉树的最小深度 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 给定一个 二叉树 ,找出其 最小深度 。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量 。 说明: 叶子节点是指没有子节点的节点 。 示

    2024年02月02日
    浏览(40)
  • 二叉树OJ题:LeetCode--104.二叉树的最大深度

    朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第104道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏: 数据结构与算法 个  人  主  页  : stackY、 C 语 言 专 栏 : C语言:从入门到精通  Leet

    2024年02月11日
    浏览(82)
  • 【算法题解】34. 二叉树的最小深度

    这是一道 简单 题 https://leetcode.cn/problems/minimum-depth-of-binary-tree/ 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明 :叶子节点是指没有子节点的节点。 示例 1: 示例 2: 提示: 树中节点数的范围在 [ 0 , 1 0 5 ] [0, 10^5] [

    2024年02月08日
    浏览(49)
  • leetcode 104——二叉树的最大深度

    给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 leetcode104 在解决树相关的问题时,一定要考虑能不能使用递归解决,如果使用递归解决,问题一般都能变得很简单,详情请看代码。

    2024年02月03日
    浏览(39)
  • leecode104——二叉树的最大深度

    左子树与右子树的最大深度可以通过递归遍历(深度优先搜索)得到,首先: 递归三部曲:(1)确定递归的参数和返回值,因为要比较的是左右子树的最大深度,所以每次传入的根节点,返回最大深度,即int类型的数字 (2)递归的终止条件:当跟节点为空,说明高度为0或

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包