双亲表示法
特点
一般采用数组储存
根结点的双亲规定为-1
根结点储存在数组下标0的位置优点
求某结点的双亲和查找根结点很方便缺点
- 查找某结点的孩子结点要遍历整个数组(看哪个结点的父结点等于要找的结点)
- 兄弟结点的位置关系不明确,如不知道是左孩子结点还是右孩子结点
- 随机删除和添加结点复杂
数据结构
java1
2
3
4public class Node{
Object data; //数据
int parent; //父结点下标
}
要想确定兄弟结点的位置关系可以多添加一个右兄弟结点下标字段
孩子表示法
多重链表表示法
不同构(各结点孩子指针数不相同)
同构(各结点孩子指针数相同)
孩子链表表示法
- 特点
结点用数组储存
某结点的孩子结点索引用链表存储 - 优点
孩子索引链表中可以表示兄弟的位置关系 - 缺点
- 查找双亲困难(要遍历每个结点以及每个结点的孩子链表找到哪个链表包含要找的结点)
- 随机删除和添加结点复杂
- 数据结构java
1
2
3
4
5
6
7
8
9
10
11//链式
public class 孩子结点索引{
int index; //索引
孩子结点索引 next; //指向下一个孩子
}
//用数组存储
public class 结点{
Object data; //数据
孩子结点索引 first; //指向第一个孩子(孩子链表的头结点)
} - 图示
双亲+孩子链表表示法
特点
将双亲表示法和孩子链表表示法结合优点
弥补了双亲表示法兄弟结点的位置关系不明确问题 和 孩子链表表示法查找双亲结点困难问题缺点
- 占用空间也跟着变大
- 随机删除和添加结点复杂
数据结构
java1
2
3
4
5
6
7
8
9
10
11
12//链式
public class 孩子结点索引{
int index; //索引
孩子结点索引 next; //指向下一个孩子
}
//用数组存储
public class 结点{
Object data; //数据
int parent; //父结点下标
孩子结点索引 first; //指向第一个孩子(孩子链表的头结点)
}图示








