数据结构-树-存储方法

1.树的存储结构

1.1双亲表示法

除了根节点外,其余每个节点不一定有孩子,但一定有双亲;
以一组连续的数据存储空间来存储树的节点,同时在每个节点里,附带一个指示器来指向其双亲结点:
data+parent
data是数据域,存储结点的数据;parent为指针域,指向该结点双亲在数组中的下标;

const MAX_TREE_SIZE = 100;
using TElemType = int ; //结点的数据类型
//节点结构
struct PTnode{
TELemTpye data; //结点数据
int parent; //双亲位置
} PTnode;
struct {
PTNode nodes[MAX_TREE_SIZE]int r,n;//根节点的位置,结点的个数
}PTree;

由于根节点是没有双亲的,因此把根节点的(双亲的)位置域设置为-1;找到双亲的时间复杂度为O(1);
寻找结点的孩子:data+parent+firstchild;(没有孩子的结点firstchild设为-1)
兄弟关系: data+parent+rightsib;右兄弟不存在,则rightsib设为-1;

1.2孩子表示法

多重链表法:每个结点有多个指针域,其中每个结点指向一棵子树的根节点
在这里插入图片描述
1.将每个结点的孩子结点排列起来。以单链表的形式储存,如果是叶子节点则为空;
2.将头指针组成线性表,采用顺序存储结构,存放进一个一维数组;
孩子链表:child + next ;child:存储某个结点在表头数组中的下标;Next:指向某结点的下一个孩子结点;
表头结点:data + firstchild ;data:存储某结点的数据信息;firstchild:存储该结点的孩子链表的头结点;

const MAX_TREE_SIZE =100;
struct CTNode {
  int child;
  CTNode *next;
}*ChildPtr;
struct CTBox{
  TElemType data;
  ChildPtr firstchild;
};
struct CTree{
CTBox nodes[MAX_TREE_SIZE];
int r,n;
}

双亲孩子表示法:

1.3孩子兄弟表示法

data+firstchild+rightsib
data:数据
firstchild:存储该结点的一个孩子结点的存储地址;
rightsib:存储该结点的右兄弟的存储地址;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值