数据结构 - 二叉搜索树
树的抽象数据类型
定义:树是由一个根结点和若干棵子树构成。树中结点具有相同数据类型及层次关系。
操作:
InitTree(*T): 构造空树T。
DestroyTree(*T):销毁树T
CreateTree(*T, definition): 按definition中给出树的定义来构造树。
ClearTree(*T): 若树T存在,则将树T清空为空树。
TreeEmpty(T): 若T为空树,返回true, 否则返回false。
TreeDepth(T): 返回T的深度。
Root(T): 返回T的根结点。
Value(T, cur_e): cur_e是树T中一个结点,返回此结点的值。
Assign(T, cur_e, value): 给树T的结点cur_e赋值为value.
Parent(T, cur_e): 若cur_e是树T的非根结点,则返回它的双亲,否则返回空。
LeftChild(T, cur_e): 若cur_e是树T的非叶结点,则返回它的最左孩子,否则返回空。
RightSibling(T, cur_e): 若cur_e有右兄弟,则返回它的右兄弟,否则返回空。
InsertChild(*T, *p, i, c): 其中p指向树T的某个结点, i为所指结点p的度加上1,非空树c与T不相交,操作结果为插入c为树T中p指结点的第i棵子树。
DeleteChild(*T, *p, i): 其中p指向树T的某个结点, i为所指结点p的度,操作结果为删除T中p所指结点的第i棵子树。
树的存储结构的表示方法:
双亲表示法、孩子表示法、孩子兄弟表示法。
双亲表示法
#define MAX_SIZE_SIZE 100 typedef int TElemType; typedef struct PTNode { TElemType data; /* 结点数据 */ int parent; /* 双亲位置 */ } PTNode; typedef struct { PTNode nodes[MAX_SIZE_SIZE]; /* 结点数组 */ int r, n; } PTree;
注意:看情况是否添加 双亲域、长子域、再有右兄弟域等情况。
孩子表示法
一、二叉搜索树
数组的优点是支持频繁的搜索与查找,但是对于插入与删除耗时较大,链表的优点是支持频繁的删除与插入,但是链表不能使用对半查找。二叉搜索树可以既支持频繁的插入元素又支持频繁搜索。
每一个节点都有两个子节点,左节点与右节点,其顺序规则为:
在左节点中的项目是父节点中项目的前序项,而右节点中的项目是父节点中项目的后序项。
二叉树ADT
类型属性:
二叉树每个节点有两个作为其后代的树,称为左子树和右子树,每一个子树本身又一是个二叉树,它的每个节点包含一个项目,它的所有左子树项目排在根项目的前面,而根项目排在所有子树项目的前面。
类型操作:
- 把树初始化为空树
- 确定树是否为空
- 确定树是否为满
- 确定树中项目的个数
- 向树中添加一个项目
- 向树中删除一个项目
- 向树中搜索一个项目
- 访问树中每一个项目
- 清空树

浙公网安备 33010602011771号