树的存储结构-----1---双亲表示法

双亲表示法

除了根结点外,其余每个结点,它不一定有孩子,但是一定有且只有一个双亲。

我们假设以一组连续空间存储树的结点,同时,在每个结点中,附设一个指示器指示其双亲结点在链表中的位置

结点结构

在这里插入图片描述
data:数据域,存储结点的数据信息。
parent:指针域,存储该结点的双亲在数组中的下标。

实现

在这里插入图片描述
由于根结点是没有双亲的,所以,约定根结点的位置域设置为-1。
在这里插入图片描述
这样的存储结构,我们可以根据结点的parent指针很容易找到它的双亲结点,所以用到时间复杂度为o(1),知道parent为 -1 时,表示找到了树的根。

问题1

可我们要知道结点的孩子是什么,该怎么做?请遍历真个结构。

遍历整个结构太麻烦,可以这样改进:

我们增加一个结点最左边孩子的域,不妨叫它长子域,这样就很容易得到结点的孩子。如果没有孩子的结点,这个长子域,就设置为-1.

如图:
在这里插入图片描述

问题2

我们很关注各兄弟之间的关系,双亲表示法无法体现这样的关系,该怎么办?

我们可以增加一个右兄弟域来体现兄弟关系,也就是说,每一个结点如果它存在右兄弟,则记录下右兄弟的下标。同样的,如果右兄弟不存在,则赋值为-1
在这里插入图片描述

问题3

但是,如果结点的孩子很多,超过了两个。我们又关注结点的双亲、又关注结点的孩子、还关注结点的兄弟,而且对时间遍历要求还比较高,那么我们还可以把此结构扩展为有双亲域、长子域、再有右兄弟域。

存储结构的设计是一个非常灵活的过程,一个存储结构设计的是否合理,取决于该存储结构的运算是否合适,是否方便,时间复杂度好不好等。


以上是<大话数据结构阅读笔记>!
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值