3 Star 16 Fork 5

Ikaros / Learning-Notes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
通用链表和二叉树.c 3.03 KB
一键复制 编辑 原始数据 按行查看 历史
Ikaros 提交于 2020-07-20 12:32 . 新增文档
树:
元素之间存储一对多关系的数据结构,常用于表现族谱关系、组织关系等,也可以借助特殊的树型结构实现查找、排序等算法,一般使用倒悬树的方式表示。
树的相关术语:
根结点:树的最上层元素,有且只能有一个。
子结点:该结点的对应下一层元素。
父结点:该结点的对应上一层元素。
叶子结点:没有子结点的元素,一般处于树的最底层。
兄弟结点:具有同一个父结点的元素,处在同一层。
高度:指的是树的层数。
密度:指的是树的结点数(包括根结点)。
度:指的是结点的子结点数量。
普通树:
子结点的数量没有限制。
顺序存储:
1、每个结点一行
下标 数据 父结点下标
0 R -1
1 A 0
2 B 0
3 C 0
4 D 1
5 E 1
6 F 2
7 G 2
8 H 2
9 I 3
10 J 3
11 K 5
12 L 7
2、兄弟结点连续存储
下标 数据 父结点下标 第一个子结点下标
0 R -1 1
1 A 0 4
2 B 0 6
3 C 0 9
4 D 1 -1
5 E 1 11
6 F 2 -1
7 G 2 12
8 H 2 -1
9 I 3 -1
10 J 3 -1
11 K 5 -1
12 L 7 -1
3、兄弟结点连续存储
下标 数据 父结点下标 第一个子结点 最后一个子结点
0 R -1 1 3
1 A 0 4 5
2 B 0 6 8
3 C 0 9 10
4 D 1 -1 -1
5 E 1 11 11
6 F 2 -1 -1
7 G 2 12 12
8 H 2 -1 -1
9 I 3 -1 -1
10 J 3 -1 -1
11 K 5 -1 -1
12 L 7 -1 -1
链式序存储:
typedef struct Node
{
TYPE data;
struct Node* brother;
struct Node* child;
}Node;
二叉树:
子结点的数量多为2
相关术语:
前序遍历:根,左,右
中序遍历:左,根,右
后序遍历:左,右,根
层序遍历:从上到下,先左后右
根据遍历顺序构建二叉树:
前中:己知前序、中序构建二叉树。
{1,2,4,7,3,5,6,8}
{4,7,2,1,5,3,8,6}
后中:己知后序、中序构建二叉树。
层序:空位置用#表示,3,1,5,#,2,4,#。
普通二叉树:对二叉树的结没有位置及数量上的要求。
满二叉树:树的每一层的结点数量都 pow(2,层数-1)
完全二叉树:除了最后一层,其它每一层的结点数量都是 pow(2,层数-1),最后层的结点按照从左往的顺序存储。
有序二叉树:所有的左子结点都小于根结点,所有右子结点都大于根结点。
平衡二叉树:首先是有序的二叉树,树的左右子树的高度相差不超过1,并且子树的子树都满足这个要求。
二叉树的顺序存储:
2^(h-1) 1
2^(h-1) 2 3
2^(h-1) 4 5 6 7
2^(h-1) 8 9 10
2^(h-1)等于第h和结点个数
当前h行的结点个数-1,前h-1的结点数之和,2^(h-1)-1 等于当前第一个结点的下标。
因上访问第h行,第n个结点的公式为:2^(h-1)-1+n-1 => 2^(h-1)+n-2
链式结构存储有序二叉树:
C
1
https://gitee.com/ikaros-521/Learning-Notes.git
git@gitee.com:ikaros-521/Learning-Notes.git
ikaros-521
Learning-Notes
Learning-Notes
master

搜索帮助