- 树 - 定义 - 有且仅有一个根结点 - 当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 - 二叉树的存储结构 - 顺序存储结构 - 链式存储结构 - 线索二叉树:将空指针域按照一种顺序指向该结点的前驱或后继形成的二叉树 - 赫夫曼树 - 又称最优二叉树 - 树的带权路径之和最小的二叉树 - 赫夫曼编码