二叉树的三种常用存储结构

发布时间:2026/11/7 4:36:54

二叉树的三种常用存储结构 树的三种常用存储结构孩子兄弟表示法、孩子表示法、双亲表示法各有特点适用于不同场景。其核心定义、优缺点及适用场景对比如下表示法核心定义优点缺点典型适用场景孩子兄弟表示法每个节点包含数据域、指向其第一个孩子的指针、指向其下一个兄弟的指针。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树与并查集习题附完整代码
延伸阅读

更多相关文章

2026/11/7 4:36:54

2026年C# .NET开发趋势与实战技巧

1. C# .NET 周刊的价值与定位 作为一门已经发展了二十余年的编程语言,C#在2026年依然保持着强劲的生命力。每周我都会收到大量开发者关于C#和.NET生态的咨询,这促使我萌生了整理C# .NET周刊的想法。这不是简单的资讯堆砌,而是针对实际开发痛点…

2026/11/7 2:15:45

网安课程梯度学习能力图谱(精准匹配技术层级,拒绝无效深耕)

多数网安新手学习混乱的核心原因,是课程学习与自身能力层级不匹配:零基础盲目深耕进阶漏洞课程、有基础反复刷入门基础课、岗位冲刺阶段沉迷零散技巧课程,最终导致时间浪费、能力停滞。网安技术具备极强的层级关联性,课程学习必须…

2026/11/7 0:32:14

一图看懂中兴通讯AI全栈战略全景

7月17日上午,上海世博展览馆,WAIC 2026现场。努比亚的展台被围得水泄不通。人群的焦点是一台名为“NaviX Ultra”的手机——全球首款AI智能体手机,也是外界期待已久的第二代“豆包手机”。半年前,它的前代M153以3499元的价格限量发…

2026/11/7 10:08:43

电工证为什么好贵网上查询怕被坑?别急,手把手教你避坑

电工证为什么好贵网上查询怕被坑?别急,手把手教你避坑 你是不是也遇到过这种情况:想考个电工证,结果一打听价格,动辄几百甚至上千,心里直打鼓, 不知道去哪报名怕被中介坑 ?其实,这种焦虑很正常,但关键是你有没有掌握正确的方式去 网上查询…

2026/11/7 10:08:43

涉县电工证在哪办理含金量怎么算

涉县电工证在哪办理含金量怎么算 之前考的证在外省能不能转过来,这是很多跨省打工或者转岗的电工最关心的问题。特别是像信阳这些地方的电工,不少人在外省打工多年,手里有证但回本地后发现不被认可,或者不知道如何办理本地的涉县电工证,心里特别没底。今…

2026/11/7 10:08:43

工地太忙根本没时间复习考试?真实经历告诉你电工作业五防是哪五防

工地太忙根本没时间复习考试?真实经历告诉你电工作业五防是哪五防 工地天天赶工期,活儿干不完,谁还有心思复习考试?这是我干电工这十年来最大的痛点。每次临近考试,手头活儿压得喘不过气,复习时间少得可怜,心里直打鼓。后来我总结出一套行得通的备考方…

2026/11/7 10:08:43

枣庄高级电工证查询怎么报名?怕考不过白交培训费的看过来

枣庄高级电工证查询怎么报名?怕考不过白交培训费的看过来 怕考不过白交培训费,枣庄高级电工证查询怎么报名?这是很多准备报考的人最关心的问题。尤其在现在,电工证不仅是从事相关工作的门槛,更是保障安全生产的重要依据。如果你正在考虑考取枣庄高级电工…

2026/11/7 10:03:43

煤气特种作业证难考吗?全国通用报考流程与避坑指南

煤气特种作业证难考吗?全国通用报考流程与避坑指南 你是不是也遇到过这种情况? 不知道去哪报名怕被中介坑 ,看到“煤气特种作业证”几个字就犯愁,觉得这证难考、门槛高?其实不然,只要找对方法、走对流程, 全国通用…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 0:03:08

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。特别是在郑州这样的城市,很多施工企业负责人和一线作业人员在报考电工证和钳工证时都面临着同样的困惑。到底该考哪个证?哪个更适合自己?哪个证书…

2026/11/7 0:03:08

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱?

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱? 之前考的证在外省能不能转过来?这个问题我遇到太多了,今天就拿广西电工证办理流程来具体说说,别再走弯路了。广西电工证的报考、复审、继续教育这些环节,如果你不了解,真的会吃大亏,尤其对于从…

2026/11/7 0:03:08

电气电工证都有哪些保姆级教程

电气电工证都有哪些保姆级教程 你是不是正愁不知道去哪报名,怕被中介坑?别急,这篇保姆级教程专为河南初次报考人员准备,帮你搞清楚 电气电工证都有哪些 ,以及如何避开那些坑。 电气电工证都有哪些?别被五花八门的证书搞懵了…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑