求二叉树深度的递归和非递归算法

非递归求二叉树高度 题目:假设二叉树采用二叉链表存储结构,设计一个非递归算法求二叉树的高度 分析: 若要采用非递归的方式来求得二叉树的高度,我们采用层次遍历是最合适的,因为这一层一层的不就很好数吗哈哈。具体实现: 这里唯一的难点就在于我们如何得知高度该加一了;我们可以设置一个标志num用来记录每一层入栈的节点个数,当我们出栈数 达到该数值时也就意味着我们的高度该加一了。 代码 struct biTree { char data; struct biTr... 阅读详情

递归算法

public static<T> int heightOfBinaryTreeInRecursion(BinaryTreeNode<T> root){ // 求二叉树的深度递归算法
        int leftHeight,rightHeight;
        if(root == null)
            return 0;
        leftHeight = heightOfBinaryTreeInRecursion(root.getLeft());
        rightHeight = heightOfBinaryTreeInRecursion(root.getRight());
        if(leftHeight > rightHeight)
            return (leftHeight+1);
        else 
            return (rightHeight+1);
    }

非递归算法

public static<T> int heightOfBinaryTree(BinaryTreeNode<T> root){ // 求二叉树深度的非递归算法
        if(root == null)
            return 0;
        DynArrayQueue<BinaryTreeNode<T>> queue = new DynArrayQueue<>();
        queue.enQueue(root);
        queue.enQueue(null); // 作为分层的标记
        int count = 0; // 第一层
        while(!queue.isEmpty()){
            root = queue.deQueue();
            if(root == null){ // 如果一层结束
                if(!queue.isEmpty()) // 为下一层添加标记
                    queue.enQueue(null);
                count++;
            } else {
                if(root.getLeft() != null)
                    queue.enQueue(root.getLeft());
                if(root.getRight() != null)
                    queue.enQueue(root.getRight());
            }
        }
        return count;
    }

完整代码可以访问我的GitHub:https://github.com/StriverLi/Data-Structures-and-Algorithms-in-Java/blob/master/src/tree/BinaryTreeNode.java

二叉树的中序、前序、后序以及层序的非递归遍历并求树的深度和结点总数 代码: #include   #include #include #include #include using namespace std;      typedef struct Node   {       int element;       struct Node * left;       struct Node * right;       }TreeNod 阅读详情

相关推荐

鱼眼双目测距实战:从OpenCV标定到SGBM匹配的完整流程解析

本文详细解析了鱼眼双目测距的完整流程,从OpenCV标定到SGBM匹配,涵盖标定、校正、匹配和测距四个关键阶段。通过实战经验分享,帮助开发者解决鱼眼镜头强畸变带来的测距挑战,提升测距精度至5%以内。特别适合机器人导航、自动驾驶和VR领域的开发者参考。

weixin_27298377的博客 122

非递归算法求二叉树的高度

采用层次遍历的算法,设置变量level记录当前节点所在的层数,设置变量last指向当前层最右边的节点,每次层次遍历出队时与last指针作比较,若两者相等,则层数+1,并让last指向下一层的最右节点,直到遍历完成。level即为二叉树的高度。...

段一的博客 3235

零基础玩转STM32CubeIDE LL库:5分钟搞定串口通信(附完整代码)

本文为零基础开发者提供了一份STM32CubeIDE LL库串口通信的快速实战指南。通过CubeMX配置、LL库核心API详解,以及中断接收与环形缓冲区的完整代码实现,帮助读者在5分钟内搭建稳定可靠的串口收发框架,解决从HAL切换到LL库的常见困惑,提升嵌入式开发效率。

weixin_29159441的博客 305

数据结构-树-求二叉树高度(递归与非递归)

一.算法思想 (1)非递归 主要采用层次遍历的算法,并设置变量height与last,其中height记录数的高度,而last则指向某一层在队列中最后一个结点的序号,每次在队列出队时与队列的队头序号front作比较,如果last==front,则代表last所指那一层的结点已全部遍历完,此时height+1 (2)递归 递归的算法比较简洁,主要是从树的最后一层开始计算,即计算二叉树的深度,而二叉树的深度等于二叉树的高度 二.源代码 (1)非递归 //1.非递归求解二叉树高度 int BtDepth(BiTr

Xulidanga的博客 4088

《缠中说禅108课》5:市场无须分析,只要看和干

喜欢吹牛皮的,在市场里最常见,例如一种以分析市场、吹牛皮为生的职业,叫什么股评、专家的。此类人不过是市场上的寄生虫,真正的猎手只会观察、操作,用嘴是打不了豺狼的。 市场就是一个狩猎场,首先你要成为一个好猎手,而一个猎手,首先要习惯于无言。如果真有什么真理,那真理也是无言的。可言说的,都不过是人类思想的分泌物,臭气熏天。真不可言说了,就无不可言,言而无言,是乃真言。 一个好的猎手,可以没有嘴巴,但一定会有一双不为外物所动的眼睛,在这眼睛下,一切如幻化般透明。要不被外物所动,则首先要不被自我所迷惑,其实..

BenRen1314的博客 800

STM32F4驱动海康工业相机实战:从PWM信号到精准触发拍照(附完整代码)

本文详细介绍了如何使用STM32F4开发板驱动海康工业相机,实现PWM信号精准触发拍照的完整方案。从硬件连接到PWM信号生成,再到相机触发配置与延迟补偿,提供了实战经验和完整代码,帮助开发者解决工业相机硬件触发中的关键问题。

weixin_33716941的博客 694

非递归算法求二叉树高度(c语言)

思路:非递归则需要利用层序遍历思想,记录层数。每从队列中出满一队节点,则高度+1。设置变量记录队列长度与新入队元素的数量,当队列长度与新入队元素数量相等时,表明队列中上一层节点已经全部出队,此时队列中的节点全部为同一层节点。 int findTreeHight(BiTree T){ Queue que; //创建队列 que = InitQueue(); BiTree t; t = T; PushQueue(&que,t); int h = 0; //记录高度 int child.

xs86467的博客 3593

ISO 15118-3协议栈开发避坑指南:从EvseSlac状态机设计看电动汽车充电握手难题

本文深入剖析了ISO 15118-3协议栈开发中的核心挑战,特别是SLAC握手流程的实现难点。以Everest项目的EvseSlac状态机为例,详细解读了从状态机设计、多厂商PLC芯片兼容性处理,到严苛的时序与超时控制等关键工程实践,为开发者提供了一套超越协议文档的、可直接落地的避坑指南和软件实现方案。

jump7的博客 265

求二叉树的高度(递归与非递归算法)

求二叉树的高度(递归与非递归算法)

weixin_43788095的博客 1654

汽水音乐自动化薅羊毛教程:从零搭建稳定赚钱脚本

📖 前言:为什么要学习自动化脚本?在数字时代,时间就是金钱。汽水音乐等App通过观看广告奖励用户金币的模式,本质上是将我们的时间转化为收益。本教程将教你如何用Python自动化这个过程,让程序为你"打工",实现被动收入。通过本教程,你将学到:移动端自动化测试的核心技术Python在自动化领域的实际应用如何将重复性任务转化为自动化流程创造属于自己的"数字员工"第一章:环境准备与基础配置1.1 硬件要求Android手机一部(建议使用备用机)USB数据线。

weixin_44947827的博客 5768

6D位姿估计系列(一)

本研究提出FoundationPose,一个统一的基础模型框架,支持基于CAD模型和无模型的6D物体姿态估计与跟踪。通过神经隐式表示实现高效新视图合成,结合大规模合成数据训练和对比学习策略,模型展现出强大的泛化能力。实验表明,该方法在LINEMOD、YCB-Video等多个基准数据集上显著优于现有专门化方法,处理速度达32Hz,且无需目标域微调。该工作为多场景物体姿态估计提供了通用解决方案。

qq625924821的博客 557

求二叉树的深度(递归和非递归算法)

// 利用同样的思路可以求某层结点个数、每层结点个数、树的最大宽度、树的高度 #define MaxSize 10 // 保证MaxSize大于二叉树结点个数+1 // 利用层次遍历非递归求树的高度 int TreeDepthByLeverOrder(Bitree &T) { if (!T) { return 0; } Bitree *Q = new Bitree[MaxSize]; BiNode *p = T; int front = 0, rear = 0; int le

ziyang的博客 1027

200、从反激到LLC:工程师的成长之路

文章摘要: 本文以工程师视角探讨从反激式到LLC电源设计的思维转变。通过48V通信电源故障案例,揭示LLC谐振电容ESR温度特性引发的隐患,强调LLC需精确计算与测试。对比反激与LLC的核心差异:反激需控制寄生参数(如漏感尖峰、电容ESR),而LLC的关键在于频率响应和死区时间优化。作者提出三大思维转变:从匝比计算转向增益曲线分析,从时域波形观察转向频域频谱诊断,从元件更换转向参数调整。最后给出实战建议,包括建立故障库、关注元件参数细节及示波器调试技巧,指出工程师需从"控制"思维升级为"谐振"思维,实现技术

Jack010169的博客 321

数据结构实验-C语言-二叉树的创建,前、中、后序遍历的递归算法和非递归算法,求叶子结点数目,求二叉树深度,判断二叉树是否相似,求二叉树左右子树互换,二叉树层序遍历的算法,判断二叉树是否是完全二叉树

1.实验目的 熟练掌握二叉树的二叉链表存储结构的C语言实现。掌握二叉树的基本操作-前序、中序、后序遍历二叉树的三种方法。了解非递归遍历过程中“栈”的作用和状态,而且能灵活运用遍历算法实现二叉树的其它操作。 2.实验内容 (1)二叉树的二叉链表的创建 (2)二叉树的前、中、后序遍历的递归算法和非递归算法的实现 (3)求二叉树中叶子结点数目的递归算法。 (4)编写求二叉树深度的递归算法。 ...

J_SUNV的博客 3837

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数据结构:二叉树的遍历

(1)实验目的 通过该实验,使学生理解二叉树的链式存储,掌握二叉树的几种遍历算法,并通过该实验使学生理解递归的含义,掌握C语言编写递归函数的方法和注意事项。 (2)实验内容 实现教材中算法6.4描述的二叉树创建算法,在此基础上实现二叉树的先序、后序递归遍历算法、两种非递归中序遍历、层序遍历、求二叉树的深度。注意:在非递归算法中用到栈和队列时,不要调用系统的栈和队列,需要自己实现栈和队列的操作。 (3)参考界面 (4)验收/测试用例 创建 输入 :ABC$ $ DE$ G $ $ F$ $ $

e_t_e_r_n_i_t_y的博客 896

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

实现教材中算法6.4描述的二叉树创建算法,在此基础上实现二叉树的先序、后序递归遍历算法、两种非递归中序遍历、层序遍历、求二叉树的深度。注意:在非递归算法中用到栈和队列时,不要调用系统的栈和队列,需要自

通过该实验,使学生理解二叉树的链式存储,掌握二叉树的几种遍历算法,并通过该实验使学生理解递归的含义,掌握C语言编写递归函数的方法和注意事项。

m0_64894312的博客 699

二叉树的深度

题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:刚刚开始我使用的是一个非递归的算法,我想着这个是一个求深度的二叉树,那么我就去中序遍历这个二叉树,然后使用一个一个栈进行消除递归,在遍历的过程中只要栈中进一个元素那么辅助统计 i  就加一,此时定义一个统计maxDep始终和这个i进行比较,当i &gt; maxDe...

疯狂的1024 584

leetcode 104 二叉树的最大深度

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回它的最大深度 3 。 解题思路: 1.非法性判断 2.递归的左右子树并且求最大值并且加一 public class code1 { public int maxDepth(Tr...

u010160949的博客 169

数据结构实验-二叉树和线索二叉树

数据结构-二叉树和线索二叉树

Kethy__的博客 311

数据结构实验7---二叉树的应用

重点: 二叉树的遍历 难点: 中序遍历的非递归实现,层序遍历的实现

qq_62474991的博客 795

Java数据结构之二叉树遍历

二叉树遍历指沿着魔调搜索路径访问二叉树的结点,每个结点被访问的次数有且仅有一次。 先序遍历 先遍历根节点,再遍历左子树,最后遍历右子树,如图1。 递归算法 递归算法结构简单,易于实现,但是在时间上开销较大,运行效率较低。 /** * @param BiTreeNode root 根结点 */ public void preOrder(BiTreeNode root) { if (...

weixin_44270248的博客 376

树和二叉树代码补充

二叉树的顺序存储 #define MaxSize 100 struct TreeNode { ElemType value; //结点中的数据元素 bool isEmpty; //结点是否为空 }; TreeNode t [MaxSize]; for (int i=0; i<MaxSize; i++){ t [i]. isEmpty=true; } 二叉树的链式存储 struct ElemType{ int value; }; typedef struct BiTNode{ ElemT.

Albirostris 349

8608 实现二叉排序树的各种算法(2)

用函数实现如下二叉排序树算法: (1) 插入新结点 (2) 前序、中序、后序遍历二叉树 (3) 中序遍历的非递归算法 (4) 层次遍历二叉树 (5) 在二叉树中查找给定关键字(函数返回值为成功1,失败0) (6) 交换各结点的左右子树 (7) 求二叉树的深度 (8) 叶子结点数 输入格式 第一行:准备建树的结点个数n 第二行:输入n个整数,用空格分隔 第三行:输入待查找的关键字 第四行:输入待查找的关键字 第五行:输入待插入的关键字 输出格式 第一行:二叉树的先序遍历序列

huang1xiao1sheng的博客 1647

非线性表——遍历二叉树代码

8.4.2遍历代码 无论按哪一种次序进行遍历,对含有n个结点的二叉树,其时间复杂度均为O(n)。 非递归所需辅助空间为栈的最大容量,即树的深度,最坏情况下,空间复杂度为O(n)。 以下都为递归算法实现 8.4.2.1先序遍历 void PreOrder( BiTree t ) { if( t ) { printf( t->data); PreOrder( t->lchild ); PreOrder( t->

ssxx2030的博客 327

非递归创建二叉树并求二叉树的深度

在学习二叉树时,必须要掌握的要点包括:二叉树的创建,遍历和了解二叉树的相关特性(二叉树的深度、高度、层数等等),这部分的代码实现很多教材直接以递归的方式展现,递归是个很好的编程思想,但是确实不是很容易理解,如果使用不当的话,往往写出来的程序运行效率较低,无论在耗费的时间还是占用的内存空间上比非递归较多,而且非递归能够将数据元素的出栈与进栈过程描述得更为清晰。因此我采用非递归的方式实现一遍。由于关于

spawn888的专栏 1049

二叉树模板 先中后序遍历,非递归算法,层次遍历,叶子结点数,深度

二叉树模板

qq_39531685的博客 671
上一篇: 获取二叉树叶子节点个数的递归及非递归算法
下一篇: 二叉树求两个结点的父节点及一个结点的所有祖先结点
「已注销」
博客等级 码龄10年 85粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值