树的结构在逻辑结构上已经不再是像链表、栈和队列一样是一对一的线性结构了,而是一对多的逻辑结构。在这里,我们利用顺序存储和链式存储的特点,实现对树的存储结构的表示。有三种不同的方法:双亲表示法、孩子表示法、孩子兄弟表示法。

 

 

使用顺序存储来存储树,将树存储在数组中。这里首先介绍双亲表示法。

在树的结构中,除了根节点外,其他节点必定有双亲节点。在这里我们假设以一组连续内存空间也就是数组来存储树的节点。同时,为了构造完整的树结构,在每个节点中附设一个指示器指示其双亲节点在连续内存空间中的位置。也就是说,每个节点除了存储自己的数据元素外,还要知道它的双亲节点在哪里。那么树的节点结构如图所示

 

 

 

 

那么将这样的节点存储在连续内存空间中,形成的存储结构和逻辑关系可由下图表示

显然,树的顺序存储结构中,每个节点都是一个结构体。结构体由两部分组成,一部分树数据域data,一部分是指针域,存储的是该节点的双亲节点在数组中的下标。同时,在数结构中,根节点是没有双亲节点的,所以将表示双亲节点的结构体中的指针设置为-1。其代码所示为

1 struct PINode
2 {
3    //data为存储数据区域,可以根据自己需要而修改
4     int data;
5    //parent中存储的是该节点的都节点在数组中的下标
6     int parent;  
7 }

 

我们只要知道树的根节点,我们就能知道整个树的所有节点。所以我们要知道树的根节点再连续内存空间的位置。同时,我们还要知道这个树中共有多少个节点。所以,我们需要另外再形成一个结构体。

struct PTree
{
    //为数组分配连续内存空间,每个数据元素都是节点
    PTNode nodes[MAX_TREE_SIZE];
    //记录根节点在数组中的位置和树中共有多少个节点。
    int r,n;
}

 

posted on   hxh_space  阅读(197)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示