考研之数据结构015_树的存储结构

一、树的逻辑结构回顾

1.树是一种在这里插入图片描述
递归定义的数据结构

二、双亲表示法(顺序存储)

1、双亲表示法

双亲表示法:每个结点中保存指向双亲的“指针”
在这里插入图片描述

2、在内存中的形式

左边的是–数组的索引
中间的是–数据值
右边的是–父亲的索引值

在这里插入图片描述

3、代码中树和树的类型定义:

树的结点定义有:
1.相应的数据
2.指向双亲的“指针”。而指针定义是int类型,指明了双亲结点在数组当中,存放的位置下表【索引】。
树的类型定义:
PTNode node[max TREE_SIZE] 是表示:
由各个结点组成的数组。
在这里插入图片描述

4.双亲表示法(顺序存储)来实现增删查

1.增加结点

直接添加,在数组中写入:
索引位置、数据信息、父结点的索引位置

2.删除结点

1.删除单个叶子结点:
–让最后一个元素信息,替换要删除的结点信息。
替换:数据信息、父结点的索引位置
–删除后,将结点n减1.

2.删除分支结点:
–删除以分支结点的一颗子树。因此要找到该节点的子孙结点,进行删除。
–找到子孙结点,也就是说要查找操作。
如果找双亲结点很容易,因为数据存储结构已经进行了存储。那么子孙结点,就要遍历对比双亲索引。所以很繁琐。

三、孩子表示法(顺序+链式存储)

1.孩子表示法的介绍

在这里插入图片描述
1.是顺序和链式存储的结合
2.用一个顺序的空间,来存储各个结点的数据,
1.左边是数组的索引
2.数据域
3.指向他第一个孩子结点指针。
在这里插入图片描述

2.具体代码分析:

第二个代码:
各个结点实际的数据是用CTBox进行存储的。

第一个代码:
而链表中的各个结点,只是保存了各个数据的索引下标。

在这里插入图片描述

四、孩子兄弟表示法-纯链式存储(最重要)

1.分析 树和二叉树的转换

在这里插入图片描述

2.转换规则:

左指针指向的是-第一个孩子
右指针指向的是-一个结点的后面的(右)兄弟
例子:
A的左指针指向B。
B的右兄弟是C,那么B的右指针指向C,
C的右兄弟是D,那么C的右指针指向D。

3.代码:

一棵树:包含了数据域、包含了两个链接指针(和二叉树结点是一样的)
在这里插入图片描述

4.树和二叉树的相互转化

在这里插入图片描述

五、重点:树、森林、二叉树的转换

本质是:可以利用二叉链表,来存储森林。
一个森林有几颗互不相交的树,将这些树依次转换成二叉树。
在逻辑上看都是同一层级,把树的根节点,看成兄弟结点。
用二叉链表存储的话:
右指针表示的是:兄弟关系
左指针表示的是:第一个孩子

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43989347/article/details/116601142
今日推荐