数据结构中树的存储结构

数据结构中树的存储结构(c++代码实现)

在数据结构这门课中树是一种一对多的数据类型,常见树的存储结构的表示方法有如下几种:

  1. 双亲表示法
  2. 孩子表示法
  3. 孩子兄弟表示法

1.双亲表示法:

这是一种以连续内存(数组)来存储树的结点的方法,每一个结点中,都带有一个指示器指向双亲结点在这段连续内存中的位置,这样就可以用数组来实现树数据结构了。结构如下:
在这里插入图片描述


class TreeNode
{
private:
 int date;      //数据域
 int* parent;   //指针域
public:
 TreeNode(int date1, int*parent1=nulptr) :date(date1), parent(parent1) {}   //构造函数
 TreeNode(){}                                                        //析构函数
};

该表示法的缺点也是存在的,因为只为结点设置了双亲结点指针,所有在内存中寻找孩子结点时还是只能遍历树结构才行。

2.孩子表示法

如果我们让每一个结点同时拥有多个指针域,其中每一个指针指向一棵子树的根结点,我们把这种方法叫做多重链表示法:

在这里插入图片描述

class TreeNode
{
private:
 int date;      //数据域
 int** parent;   //指针域,里面保存的是指向每一个子结点的指针信息
public:
 TreeNode(int date1, int**parent1) :date(date1), parent(parent1) {}   //构造函数
 TreeNode(){}                                                        //析构函数
};

该方法预先不能知道每一个结点的子结点是多少,造成很多指针域都是空的,容易造成内存空间的浪费,读者可以自主的将代码进行改进,如可以在结点中加一个记录子结点数目的数据域。

3.孩子兄弟表示法

上面我们分别从双亲以及孩子的角度研究存储结构,接下来介绍用兄弟怎么来表示树这种数据结构。首先我们知道任意一棵树,中间的任意一个结点都只拥有一个大孩子(第一个孩子),而对于每一个孩子都最多只有一个右兄弟,因此我们可以设置两个指针域分别直指向自己的大孩子和右兄弟。
在这里插入图片描述

class TreeNode
{
private:
 int date;      //数据域
 int* firstchild;   
 int* rightbro;
public:
 TreeNode(int date1, int* firstchild1,int* rightbro1) :date(date1), firstchild(firstchild1),rightbro(rightbro1) {}   //构造函数
 TreeNode(){}                                                        //析构函数
};

在这里插入图片描述

小结:

以上是一般树的常见表示方法,读者可以发挥自己的想象力对这些表示方法进行改进,总而言之,存储结构的设计是一个非常灵活的设计。读者可以自己发挥想象力设计自己的存储结构的表示方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值