- 树
- 定义
- 有且仅有一个根结点
- 当n > 1是,其余结点可分为子树
- 树的抽象数据类型
ADT Tree {
D:具有相同特性的数据元素的集合
R:。。。
P
InitTree(&T)
DestroyTree(&T)
CreateTree(&T, definition)
ClearTree(&T)
TreeEmpty(T)
TreeDepth(T)
Root(T)
Value(T, cur_e)
Assign(T, cur_e, value)
Parent(T, cur_e)
LeftChild(T, cur_e)
RightChild(T, cur_e)
InsertChild(&T, &p, i, c)
DeleteChild(&T, &p, i)
TraverseTree(T, visit())
}ADT Tree
- 森林:n棵不相交的树的集合
- 二叉树
- 定义:每个结点至多只有2个结点的树
- 二叉树的抽象数据类型
ADT BinaryTree {
InitBiTree(&T)
DestroyBiTree(&T)
CreateBiTree(&T, definition)
ClearBiTree(&T)
BiTreeEmpty(T)
BiTreeDepth(T)
Root(T)
Value(T, cur_e)
Assign(T, cur_e, value)
Parent(T, cur_e)
LeftChild(T, cur_e)
RightChild(T, cur_e)
InsertChild(&T, &p, i, c)
DeleteChild(&T, &p, i)
PreOrderTraverse(T, visit())
InOrderTraverse(T, visit())
PostOrderTraverse(T, visit())
LevelOrderTraverse(T, visit())
}ADT BinaryTree
- 二叉树的特殊形态
- 满二叉树:每一层都达到最大结点数的二叉树
- 完全二叉树:从左到右,从上到下连续编号与约定编号一一对应的二叉树
- 二叉树的性质
- 第i层上至多有2^(i-1)个结点
- 深度为k的二叉树至多有2^(k)-1个结点
- 叶子节点数 = 有2个儿子的节点数 + 1(n0 = n2 + 1)
- 有n个结点的完全二叉树的的深度为floor(log(2)n)+1
- 二叉树的存储结构
- 顺序存储结构
- 链式存储结构
- 线索二叉树:将空指针域按照一种顺序指向该结点的前驱或后继形成的二叉树
- 赫夫曼树
- 又称最优二叉树
- 树的带权路径之和最小的二叉树
- 赫夫曼编码