当前位置: 首页 > article >正文

【初阶数据结构】 左右逢源的分支诗律 二叉树1

点击展开/收起 文章目录文章目录树的概念***树的基础概念***森林树和森林的存储二叉树二叉树的性质二叉树的遍历二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力树的概念在讲解二叉树之前,我们先提一嘴树的概念,不同于我们之前学到的栈与队列,链表顺序表,树是一种非线性结构,下面我具体讲讲树的概念.首先树的子树与子树之间不可相连,子树与其他树的孩子也不可相连树的基础概念如下图就是一颗树:1.节点的度是指,如上图A节点他连了三个子树,它的度就为3,节点的度就是该节点子树个数2.树的度 : 树的度就是一棵树中,度最大的节点的度 eg:在上图中树的度为三3.叶节点: (又称为终端节点),也就是度为零的节点4.父节点: ,含有子节点的节点成为它的父节点的子节点,eg:子节点B C D的父节点就是A5.兄弟节点: ,就是在同一行,具有相同父节点的节点6.结点的层次: ,从根节点定义为第一层,往下层数相加7.树的高度,: 总层数就是树的高度8.堂兄弟节点: 双亲在同一层的互为堂兄弟节点9.根节点: 就是最顶上的节点 也就是AtypedefintDataType;structNode{structNode*firstChild1;// 第一个孩子结点structNode*pNextBrother;// 指向其下一个兄弟结点DataType data;// 结点中的数据域}森林在树的基础概念之上 ,我们引出了森林;如图所示:在森林中没有共同的根节点,是一群树的集合树和森林的存储通常,我们是把树和森林,以二叉树地形式来存储typedef int DataType;structNode{structNode*firstChild1;// 第一个孩子结点structNode*pNextBrother;// 指向其下一个兄弟结点DataType data;// 结点中的数据域}如果是森林的话,去掉A节点就好了二叉树存储森林和树区别:树变二叉树没有右孩子,森林变二叉树有右孩子下面我们来观察一下树的后续遍历与他变成的二叉树的中序遍历树的后序遍历:DHIEFBGCA树变的二叉树的中序遍历:DHIEBGCA我们会发现树的后序遍历与他对映的二叉树中序遍历一致森林的遍历方式是把这里为例子,森林后序遍历,就是从左到右,每颗小树的后续遍历按照从左到右顺序拼起来同理也得:我们会发现森林的后序遍历与他对映的二叉树中序遍历一致在这里我们常常会见到有些说法,例如,树,森林的前根遍历,中根遍历,后根遍历,其实就是他转换成对应的二叉树后的前序遍历,中序遍历,后序遍历二叉树根据树的定义二叉树就是一种特殊的树,它的度不大于2,意思是他一个节点最多有两个孩子满二叉树与完全二叉树如图所见,满二叉树就是每层全满的二叉树完全二叉树就是倒数第二层全满,最后一层靠左一侧的二叉树为什么要单独提这两种二叉树呢?因为这两种二叉树,是满的空间利用率高可以像堆一样,顺序存储,由图可以看出:满二叉树与完全二叉树空间利用率很高,适合顺序存储,非完全二叉树空间利用率很低会有大量的位置空缺,浪费空间,因此我们会采用链式存储二叉树的性质1. 若规定根结点的层数为1则一棵非空二叉树的第i层上最多有2^(h-1) 个结点.2. 若规定根结点的层数为1则深度为h的二叉树的最大结点数是 2^h - 1.3. 对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为n2 ,则有n0 n21二叉树的遍历在学习二叉树的基本操作前需先要创建一棵二叉树然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入为了降低大家学习成本此处手动快速创建一棵简单的二叉树快速进入二叉树操作学习等二叉树结构了解的差不多时我们反过头再来研究二叉树真正的创建方式。自己手搓一棵二叉树typedefintBTDataType;typedefstructBinaryTreeNode{BTDataType _data;structBinaryTreeNode*_left;structBinaryTreeNode*_right;}BTNode;BTNode*CreatBinaryTree(){BTNode*node1BuyNode(1);BTNode*node2BuyNode(2);BTNode*node3BuyNode(3);BTNode*node4BuyNode(4);BTNode*node5BuyNode(5);BTNode*node6BuyNode(6);node1-_leftnode2;node1-_rightnode4;node2-_leftnode3;node4-_leftnode5;node4-_rightnode6;returnnode1;}大家在学习二叉树的遍历时我建议初期还是把空节点也写上举个例子这样对遍历就了解的很清楚下面我们展示代码实现当然这里只是打印,没有存储他的顺序,再下一次博客,我会具体实现二叉树的前序遍历voidprevorder(BTNode*root){if(rootNULL){printf(N );return;}printf(%d ,root-data);prevorder(root-left);prevorder(root-right);}二叉树的中序遍历voidInorder(BTNode*root){if(rootNULL){printf(N );return;}Inorder(root-left);printf(%d ,root-data);Inorder(root-right);}二叉树的后序遍历voidBackorder(BTNode*root){if(rootNULL){printf(N );return;}Backorder(root-left);Backorder(root-right);printf(%d ,root-data);}希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力

相关文章:

【初阶数据结构】 左右逢源的分支诗律 二叉树1

📖 点击展开/收起 文章目录 文章目录树的概念***树的基础概念***森林树和森林的存储二叉树二叉树的性质二叉树的遍历二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力!树的概念 在讲解…...

在OpenClaw中集成Taotoken实现多模型Agent工作流的详细步骤

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在OpenClaw中集成Taotoken实现多模型Agent工作流的详细步骤 对于使用OpenClaw构建AI Agent的开发者而言,能够灵活调用不…...

2026女性入局IT:这10张证书最吃香

一、引言:数字化转型背景下的IT职业性别结构变迁根据Gartner 2025年度全球数字化劳动力报告显示,女性在IT领域的参与度正从传统的“软件开发与测试”向“数据驱动决策”、“产品与项目管理”以及“用户体验设计”迁移。这一结构性变化主要归因于企业对数…...

taotoken用量看板如何帮助个人开发者清晰掌握月度ai支出

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 taotoken用量看板如何帮助个人开发者清晰掌握月度ai支出 对于个人开发者或小型工作室而言,将大模型能力集成到项目中是…...

PPTAgent终极指南:如何5分钟完成专业演示文稿的AI智能生成

PPTAgent终极指南:如何5分钟完成专业演示文稿的AI智能生成 【免费下载链接】PPTAgent An Agentic Framework for Reflective PowerPoint Generation 项目地址: https://gitcode.com/gh_mirrors/pp/PPTAgent 你是否曾为制作演示文稿而熬夜加班?是否…...

HarmonyOS 6 CalendarPickerDialog 日历选择弹窗使用文档

文章目录完整代码功能概述代码结构说明核心参数详解1. 基础参数2. DateRange 结构说明3. 示例禁用区间配置说明总结完整代码 Entry Component struct CalendarPickerDialogExample {private selectedDate: Date new Date(2025-08-05);private disabledDateRange: DateRange[]…...

3分钟为Windows 11 LTSC恢复微软商店的完整指南:解决精简版系统应用生态缺失问题

3分钟为Windows 11 LTSC恢复微软商店的完整指南:解决精简版系统应用生态缺失问题 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore Windows …...

【AI大模型】Transformer 架构是什么?关键模块都有哪些

【AI大模型】Transformer 架构是什么?关键模块都有哪些? Transformer 出自 2017 年经典论文 Attention Is All You Need,它完全抛弃 RNN 结构,仅靠注意力 前馈网络实现序列建模,是现在 GPT、BERT、ViT、T5 等所有大模…...

HarmonyOS 6 CustomDialog 嵌套弹窗使用文档

文章目录完整代码弹窗嵌套结构1. 弹窗层级关系2. 嵌套实现关键逻辑核心参数与API1. CustomDialog 装饰器2. CustomDialogController 弹窗控制器3. 关闭拦截 onWillDismiss4. 数据双向绑定 Link5. 生命周期管理总结完整代码 // xxx.ets CustomDialog struct CustomDialogExampl…...

基于SSM框架的传统服饰文化平台体验(10034)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

谷歌关键词搜索怎么做上去? 提升首页点击率的4个标题优化细节

某家出口企业耗费6个月将“工业水泵制造”推至搜索结果第三位。搜索控制台报表显示,该网页月度曝光量达45,000次,访客仅有540人。点击率停留在1.2%。排在第五位的同行业公司,凭借52个字符的标题,拿走月均3,200个访客。一份针对海外…...

MoneyPrinterTurbo终极指南:5步实现AI短视频自动化创作

MoneyPrinterTurbo终极指南:5步实现AI短视频自动化创作 【免费下载链接】MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频 Generate short videos with one click using AI LLM. 项目地址: https://gitcode.com/GitHub_Trending/mo/MoneyPrinterTu…...

贾子竞争哲学与新范式升维战略——从 “多维对抗“ 到 “意义消解“ 的终极战略蓝图

贾子竞争哲学与新范式升维战略——从 "多维对抗" 到 "意义消解" 的终极战略蓝图摘要本战略体系彻底颠覆了以价格、功能、渠道为核心的传统红海对抗逻辑,提出了一套基于 "维度升维、悖论锁定、意义消解、时间收割" 的全新竞争哲学。其…...

【Transformer系列】从One-Hot到Embedding:构建AI语言理解的基石

1. 从One-Hot编码说起:AI的第一堂语言课 想象你正在教一个外星人认识汉字。你拿出一本字典说:"这里有10万个字,每个字对应一个编号,猫是第12345号,狗是第67890号。"这就是最原始的One-Hot编码思想——用一串…...

我的思维模型 -- 11.数学与统计学篇

正态分布 核心逻辑:均值回归中心极限定理:大量相互独立、来自同一分布的随机变量,它们的平均值(或总和)在样本量足够大时,都会趋向于正态分布约 68% 的数据落在 范围内约 95% 的数据落在 范围内均值…...

ARM异常处理机制与ESR寄存器详解

1. ARM异常处理机制概述在ARMv8/v9架构中,异常处理是处理器响应硬件或软件事件的核心机制。当发生异常时,处理器会暂停当前程序执行,跳转到预定义的异常向量表入口,同时将异常相关信息记录在异常综合征寄存器(ESR)中。异常可能由多…...

【职场】那些把公司当家的人,最先被扫地出门

那些把公司当家的人,最先被扫地出门“你爱公司爱得越深,离开的时候就摔得越惨。因为公司从一开始,就没打算和你谈感情。”一、那种人,你一定见过 他是第一个到公司的,也是最后一个离开的。 他的工位永远是最乱的那个&a…...

ARM CoreSight ROM Tables解析与调试实践

1. ARM CoreSight ROM Tables基础解析在嵌入式调试领域,ARM CoreSight架构提供了一套完整的调试与追踪解决方案。作为该架构的关键组成部分,ROM Tables扮演着系统调试资源的"目录"角色。想象一下走进一个巨大的图书馆,ROM Tables就…...

【职场】职场上,从不发脾气的人,最值得警惕

职场上,从不发脾气的人,最值得警惕“真正危险的人,从来不是那个拍桌子的人。而是那个,永远在微笑的人。”一、你身边有没有这种人 开会的时候,无论发生什么,他都面带微笑。 被否定了,点头&#…...

【职场】聪明人,从不在公司交朋友

聪明人,从不在公司交朋友“你以为你们是朋友。但有一天你会发现,你们之间站着一个共同的雇主。”一、那个"最懂你"的同事 你们一起骂过同一个领导。 一起在茶水间吐槽过公司文化。 一起在深夜加班时互相打气。 你告诉他你想离职,告…...

软件测试从业者理财指南:别让辛苦钱在通胀中缩水

你的“缺陷”不止在代码里作为软件测试工程师,你每天都在和缺陷打交道——功能缺陷、性能缺陷、安全缺陷。你擅长用边界值分析挖出隐藏的bug,用等价类划分提升用例效率,用自动化脚本把重复劳动压缩到极致。但当你关掉Jira,看着工资…...

从数据到角度:手把手调试大疆C板BMI088,解决姿态解算精度跳动的那些坑

从数据到角度:手把手调试大疆C板BMI088,解决姿态解算精度跳动的那些坑 调试嵌入式系统中的传感器数据,尤其是姿态解算这类对精度要求极高的应用,往往需要开发者具备跨领域的知识储备和丰富的实战经验。本文将分享我在使用大疆C板搭…...

从控制台账单看使用 Taotoken token plan 带来的实际节省

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从控制台账单看使用 Taotoken token plan 带来的实际节省 在管理大模型 API 调用成本时,除了关注模型单价,…...

达梦数据库主备集群手工搭建及主备切换演练

环境:DM8、Linux(CentOS 7 ),三台服务器。 本文记录从零搭一套"一主一备一监视" 式的主备集群,纯手工操作,不依赖图形化工具。 一、环境规划 1.1 IP规划 角色主机名业务IP心跳IP实例名主库&…...

Obsidian Importer:一站式笔记数据迁移终极指南

Obsidian Importer:一站式笔记数据迁移终极指南 【免费下载链接】obsidian-importer Obsidian Importer lets you import notes from other apps and file formats into your Obsidian vault. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-importer …...

NoFences:如何用开源方案解决Windows桌面管理难题

NoFences:如何用开源方案解决Windows桌面管理难题 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences Windows桌面图标管理长期困扰着用户,NoFences作为开…...

【模块化设计-14】深入解析 RT-Thread syswatch 系统监控模块:保障系统稳定的核心卫士

在嵌入式系统开发中,系统的稳定性是重中之重。RT-Thread 提供的 syswatch(系统监控)模块,专为解决线程异常阻塞、保障系统持续运行设计。本文将从模块设计理念、核心功能、配置项、工作流程到实际测试,全方位解析 sysw…...

【模块化设计-13】OAM 线程模块详解

该模块是基于 RT-Thread 实时操作系统实现的一个 OAM(Operation, Administration and Maintenance,操作、管理和维护)专用线程模块,核心功能是提供独立的 OAM 业务处理线程、消息队列机制和定时器管理能力,适用于嵌入式…...

【模块化设计-11】基于嵌入式系统的周期性任务调度框架设计与实现

基于嵌入式系统的周期性任务调度框架设计与实现嵌入式系统的稳定性与实时性核心在于任务调度框架的设计,合理的框架不仅能保障各类外设任务有序执行,更能为系统扩展与维护奠定基础。本文以一款集成 ADC 采集、系统守护、外设交互的嵌入式应用为例&#x…...

【模块化设计-10】UART1 驱动 + 环形 FIFO 实现高效串口数据收发

在嵌入式开发中,串口(UART)是最常用的通信接口之一,而直接采用中断 缓冲区的方式处理串口数据,能有效避免数据丢失、提升收发效率。本文将基于实际项目代码,详解UART1 驱动与环形 FIFO(ring_fi…...