二叉树的三种常用存储结构
📅 2026/7/21 11:25:13
👁️ 次浏览
树的三种常用存储结构孩子兄弟表示法、孩子表示法、双亲表示法各有特点适用于不同场景。其核心定义、优缺点及适用场景对比如下表示法核心定义优点缺点典型适用场景孩子兄弟表示法每个节点包含数据域、指向其第一个孩子的指针、指向其下一个兄弟的指针。1.结构统一便于实现树与二叉树的相互转换。2. 便于实现大多数树的操作如遍历、查找孩子。1. 查找指定节点的双亲效率较低需要遍历。1. 需要将树转换为二叉树处理的场景。2. 文件系统目录结构。3. 需要频繁进行先根/后根遍历的场景。孩子表示法每个节点的所有孩子节点链接成一个单链表节点本身包含数据域和指向该孩子链表头部的指针。1. 查找某个节点的所有孩子非常方便、高效。2. 直观反映了节点的孩子关系。1. 查找节点的双亲困难同样需要遍历。2. 若每个节点的孩子链表都单独存储空间开销可能较大。1. 需要频繁查找或遍历某个节点所有孩子的场景如任务调度、家谱查询子孙。双亲表示法使用一组连续空间如数组存储所有节点每个节点包含数据域和指向其双亲节点在数组中位置的索引根节点的双亲索引为-1。1.查找任意节点的双亲速度极快O(1)。2. 结构简单存储紧凑。1. 查找某个节点的所有孩子效率低需要遍历整个数组。2. 不便于实现树的遍历等操作。1.并查集Union-Find数据结构。2. 需要频繁查找节点祖先或双亲的场景如组织架构向上汇报。1. 孩子兄弟表示法二叉链表表示法这是最常用的树存储结构之一又称“左孩子右兄弟表示法”。它将一棵普通的树转换为一棵二叉树进行存储。数据结构定义C语言typedef struct CSNode { ElemType data; // 节点数据 struct CSNode *firstChild; // 指向第一个孩子节点左孩子 struct CSNode *nextSibling; // 指向下一个兄弟节点右兄弟 } CSNode, *CSTree;示例对于下图所示的树A / | \ B C D / \ \ E F G其孩子兄弟表示法对应的二叉树形态为A / B / \ E C \ \ F D / G节点A的firstChild指向BnextSibling为NULL根节点无兄弟。节点B的firstChild指向EnextSibling指向C。节点E的firstChild为NULLE无孩子nextSibling指向F。核心操作示例先根遍历void PreOrderTraverse(CSTree T) { if (T) { visit(T-data); // 访问根节点 PreOrderTraverse(T-firstChild); // 递归遍历子树第一个孩子链 PreOrderTraverse(T-nextSibling);// 递归遍历兄弟链 } } // 此遍历顺序等价于原树的先根遍历。2. 孩子表示法此方法将每个节点的孩子组织成一个链表。数据结构定义C语言#define MAX_TREE_SIZE 100// 孩子链表节点 typedef struct CTNode { int childIdx; // 孩子在数组中的位置索引 struct CTNode *next; // 指向下一个孩子} *ChildPtr; // 表头节点typedef struct { ElemType data; // 节点数据 ChildPtr firstChild; // 指向第一个孩子的指针 } CTBox; // 树结构 typedef struct { CTBox nodes[MAX_TREE_SIZE]; // 节点数组 int rootIdx; // 根节点位置 int nodeNum; // 节点数 } CTree;存储示意图对于上述示例树假设节点按A(0), B(1), C(2), D(3), E(4), F(5), G(6)顺序存储nodes[0]AdataA,firstChild- 链表[1]-[2]-[3](B, C, D)。nodes[1]BdataB,firstChild- 链表[4]-[5](E, F)。nodes[3]DdataD,firstChild- 链表[6](G)。3. 双亲表示法此方法通过存储每个节点的双亲位置来隐式表示树结构。数据结构定义C语言#define MAX_TREE_SIZE 100 typedef struct PTNode { ElemType data; // 节点数据 int parentIdx; // 双亲节点在数组中的索引根节点通常设为-1 } PTNode; typedef struct { PTNode nodes[MAX_TREE_SIZE]; // 节点数组 int nodeNum; // 节点数 } PTree;存储示例对于上述示例树其双亲表示法数组存储内容如下数组索引dataparentIdx0A-11B02C03D04E15F16G3核心操作示例查找节点所有孩子// 在双亲表示法中查找节点p的所有孩子效率较低 void FindChildren(PTree tree, int p) { printf(节点%c的孩子有, tree.nodes[p].data); for (int i 0; i tree.nodeNum; i) { if (tree.nodes[i].parentIdx p) { // 遍历整个数组寻找双亲为p的节点 printf(%c , tree.nodes[i].data); } } printf( ); }总结与选择建议需要频繁进行树与二叉树转换、或进行先根/后根遍历时优先选择孩子兄弟表示法。需要频繁查找节点的所有孩子时孩子表示法更高效。需要频繁查找节点的双亲或祖先如并查集操作双亲表示法是首选并可结合路径压缩等优化技术。在实际工程中可根据主要操作类型混合使用这些表示法或在双亲表示法的基础上增加孩子链表指针形成“带孩子链的双亲表示法”以兼顾双亲与孩子的查找效率。参考来源从AnyView习题到实战树与并查集核心算法深度剖析树与二叉树学习笔记【数据结构】图解树与二叉树从底层逻辑到数学性质的深度重构【数据结构·考研】左孩子右兄弟解锁树与二叉树转换的算法密码数据结构课设救星手把手教你用C语言搞定Anyview树与并查集习题附完整代码
1. C# .NET 周刊的价值与定位 作为一门已经发展了二十余年的编程语言,C#在2026年依然保持着强劲的生命力。每周我都会收到大量开发者关于C#和.NET生态的咨询,这促使我萌生了整理C# .NET周刊的想法。这不是简单的资讯堆砌,而是针对实际开发痛点…
📅 2026/7/21 11:25:13
我用AI生成论文软件已经快两年了,写过课程论文,也写过毕业论文初稿,踩过坑也尝过甜头。网上对这类工具的评价两极分化:有人说是"神器",有人说是"学术毒药"。我的真实体验是:它既不是万…
📅 2026/7/21 11:24:13
WebAssembly设计哲学:构建安全高效的跨平台执行环境 【免费下载链接】design WebAssembly Design Documents 项目地址: https://gitcode.com/gh_mirrors/de/design
WebAssembly作为现代Web平台的核心技术,正在彻底改变我们构建和部署高性能应用的…
📅 2026/7/21 11:24:13
1. 项目概述:当C遇上量化积分测试 在量化金融和科学计算领域,积分运算无处不在。从计算期权定价模型中的复杂期望值,到评估投资组合的风险敞口,再到校准复杂的随机波动率模型,积分都是绕不开的核心数学工具。然而&…
📅 2026/7/21 18:44:18
5分钟掌握OpenVoice:免费开源语音克隆终极指南 【免费下载链接】OpenVoice Instant voice cloning by MIT and MyShell. Audio foundation model. 项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
OpenVoice是由MIT和MyShell联合开发的免费开源…
📅 2026/7/21 18:44:18
Simulated Hospital安全最佳实践:保护模拟医疗数据的5个关键措施 【免费下载链接】simhospital 项目地址: https://gitcode.com/gh_mirrors/si/simhospital
在医疗行业数字化转型过程中,模拟医疗数据的安全保护至关重要。Simulated Hospital作为…
📅 2026/7/21 18:44:18
5步掌握vnpy:打造你的专属AI量化交易系统 【免费下载链接】vnpy 基于Python的开源量化交易平台开发框架 项目地址: https://gitcode.com/vnpy/vnpy
想要告别繁琐的手动交易,实现智能化的量化投资?vnpy作为基于Python的开源量化交易平台…
📅 2026/7/21 18:44:18
10个必下载的Stable Diffusion模型:如何为不同场景选择最佳AI绘图工具 【免费下载链接】comflowy Unleash endless possibilities with ComfyUI and Stable Diffusion, committed to crafting refined AI-Gen tools and cultivating a vibrant community for both d…
📅 2026/7/21 18:44:18
你是不是也被那些满屏的“geo korea”广告搞晕了头?这篇文不整虚的,直接告诉你这玩意儿到底是真香还是智商税,看完你就知道该不该掏钱。说实话,刚接触这概念的时候,我也觉得挺玄乎。网上那些吹得天花乱坠的文案,什么“一键解锁韩流资源”、“无视地域限制”,听得人心痒痒…
📅 2026/7/21 18:44:02
本文关键词:geo geo测试你是不是也遇到过这种奇葩事?明明你的网站内容写得比同行好,图片更清晰,甚至价格还更低,但在搜索结果里就是排不进去。特别是做本地生意的老板,那种看着隔壁老王明明啥也不是,却天天坐在收银台数钱的滋味,真的憋屈。我最近为了搞懂这个所谓的“地…
📅 2026/7/21 0:00:39
1. Octane Render与C4D的黄金组合:为什么选择这个方案?在三维创作领域,渲染器的选择往往决定了作品的最终呈现质量和工作效率。作为Cinema 4D(C4D)用户,Octane Render的GPU加速特性与实时预览功能ÿ…
📅 2026/7/21 0:00:41
1. GPMC接口设计:从硬件连接到软件配置的全局视角在嵌入式系统开发中,尤其是基于TI Sitara系列如AM263x这类高性能微控制器的项目里,外部存储器的扩展几乎是绕不开的一环。无论是存放大量非易失性代码的NOR Flash,还是作为高速数据…
📅 2026/7/21 0:00:41
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/21 1:04:03
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/21 1:04:03
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/21 1:04:03
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/21 7:04:23
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/21 17:04:52
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/21 5:04:16