6.2.1 二叉树的类型定义 基本操作P: {结构初始化} InitBiTree(&T); 操作结果:构造空二叉树 T。 |
||||
CreateBiTree(&T, definition); 初始条件:definition 给出二叉树 T 的定义。 操作结果:按 definition 构造二叉树 T。 {销毁结构} DestroyBiTree(&T); 初始条件:二叉树 T 存在。 操作结果:销毁二叉树 T。 {引用型操作} BiTreeEmpty(T); 初始条件:二叉树 T 存在。 操作结果:若T为空二叉树,则返回 TRUE,否则返回 FALSE。 |
和树相同,创建二叉树的算法取决于它的数据元素之间关系的输入方式。 |
|||
BiTreeDepth(T); 初始条件:二叉树 T 存在。 操作结果:返回 T 的深度。 Root(T); 初始条件:二叉树 T 存在。 操作结果:返回 T 的根。 Value(T, e); 初始条件:二叉树 T 存在,e 是 T 中某个结点。 操作结果:返回 e 的值。 Parent(T, e); 初始条件:二叉树 T 存在,e 是 T 中某个结点。 操作结果:若e是T的非根结点,则返回它的双亲,否则返回"空"。 LeftChild(T, e); 初始条件:二叉树 T 存在,e 是 T 中某个结点。 操作结果:返回 e 的左孩子。若 e 无左孩子,则返回"空"。 RightChild(T, e); 初始条件:二叉树 T 存在,e 是 T 中某个结点。 操作结果:返回 e 的右孩子。若 e 无右孩子,则返回"空"。 LeftSibling(T, e); 初始条件:二叉树 T 存在,e 是 T 中某个结点。 操作结果:返回 e 的左兄弟。若 e 是其双亲的左孩子或无左兄弟, 则返回"空"。 RightSibling(T, e); 初始条件:二叉树 T 存在,e 是 T 的结点。 操作结果:返回 e 的右兄弟。若 e 是其双亲的右孩子或无右兄弟, 则返回"空"。 PreOrderTraverse(T, visit()); 初始条件:二叉树 T 存在,visit 是对结点操作的应用函数。 操作结果:先序遍历 T,对每个结点调用函数 visit 一次且仅一次。 一旦 visit() 失败,则操作失败。 InOrderTraverse(T, vsit()); 初始条件:二叉树 T 存在,visit 是对结点操作的应用函数。 操作结果:中序遍历 T,对每个结点调用函数 Visit 一次且仅一次。 一旦 visit() 失败,则操作失败。 PostOrderTraverse(T, visit()); 初始条件:二叉树T存在,visit 是对结点操作的应用函数。 操作结果:后序遍历 T,对每个结点调用函数 visit 一次且仅一次。 一旦 visit() 失败,则操作失败。 LevelOrderTraverse(T, visit()); 初始条件:二叉树 T 存在,visit 是对结点操作的应用函数。 操作结果:层序遍历 T,对每个结点调用函数 visit 一次且仅一次。 一旦 visit() 失败,则操作失败。 {加工型操作} ClearBiTree(&T); 初始条件:二叉树 T 存在。 操作结果:将二叉树 T 清为空树。 Assign(&T, &e, value); 初始条件:二叉树 T 存在,e 是 T 中某个结点。 操作结果:结点 e 赋值为 value。 InsertChild(&T, p, LR, c); 初始条件:二叉树 T 存在,p 指向 T 中某个结点,LR 为 0 或 1, 非空二叉树 c 与 T 不相交且右子树为空。 操作结果:根据 LR 为 0 或 1,插入 c 为 T 中 p 所指结点的左或右子树。 p 所指结点原有左或右子树成为 c 的右子树。 DeleteChild(&T, p, LR); 初始条件:二叉树 T 存在,p 指向 T 中某个结点,LR 为 0 或 1。 操作结果:根据 LR 为 0 或 1,删除 T 中 p 所指结点的左或右子树。 } ADT BinaryTree |
二叉树上结点的层次和深度等定义均和树相同。 |