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
 
  二叉树上结点的层次和深度等定义均和树相同。