基本操作:

 {结构初始化}
  InitTree(&T);
   操作结果:构造空树 T。

  CreateTree(&T,definition);
   初始条件:definition 给出树T的定义。
   操作结果:按 definition 构造树 T。

 {销毁结构}
  DestroyTree(&T);
   初始条件:树 T 存在。
   操作结果:销毁树 T。

 {引用型操作}
  TreeEmpty(T);
   初始条件:树 T 存在。
   操作结果:若 T 为空树,则返回 TRUE,否则返回 FALSE。
 
 
  可以多种形式给出树的定义。例如,上页图所示树可由13个数据元素组成的集合和关系 R 唯一确定。

  此外,可从另一个角度来定义树。
  定义森林为 m(m≥0) 棵互不相交的树的集合。

  则可定义树是一个二元组
   Tree = ( root,F )

  其中,root 是数据元素,称作树的根,F 是子树森林,记作
   F=( T1,T2,…,Tm ),

  其中 Ti=(ri,Fi) 称作根 root 的第 i 棵(符合本定义的)子树,当 m≠0 是,在树根和其子树森林之间存在下列关系:
  RF={<root,ri>|i=1,2,…,m, m>0}
 
    TreeDepth(T);
   初始条件:树T存在。
   操作结果:返回T的深度。

  Root(T);
   初始条件:树 T 存在。
   操作结果:返回 T 的根。

  Value(T, cur_e);
   初始条件:树 T 存在,cur_e 是 T 中某个结点。
   操作结果:返回 cur_e 的值。
 
 
  树的深度定义为树中叶子结点所在最大层次数。



  从树的定义可知,"根"即为树中没有前驱的结点。

 
    Parent(T, cur_e);
   初始条件:树 T 存在,cur_e 是 T 中某个结点。
   操作结果:若 cur_e 是T的非根结点,则返回它的双亲,否则返回"空"。

  LeftChild(T, cur_e);
   初始条件:树 T 存在,cur_e 是 T 中某个结点。
   操作结果:若 cur_e 是T的非叶子结点,则返回它的最左孩子,
        否则返回"空"。
 
 
  称根结点为子树根的"双亲"。

  称子树根为根结点的"孩子",所谓"最左孩子"指的是在存储结构中存放的第一棵子树的根。虽然无序树的子树之间逻辑上不存在次序关系,但一旦建立了存储结构,子树间的次序关系也就自然形成了。
 
    RightSibling(T, cur_e);
   初始条件:树 T 存在,cur_e 是 T 中某个结点。
   操作结果:若 cur_e 有右兄弟,则返回它的右兄弟,否则返回"空"。

  TraverseTree(T, visit());
  初始条件:树T存在,visit 是对结点操作的应用函数。
  操作结果:按某种次序对 T 的每个结点调用函数 visit() 一次且至多一次。
       一旦 visit() 失败,则操作失败。

 {加工型操作}
  Assign(T, cur_e, value);
   初始条件:树T存在,cur_e 是 T 中某个结点。
   操作结果:结点 cur_e 赋值为 value。

  ClearTree(&T);
   初始条件:树 T 存在。
   操作结果:将树 T 清为空树。
 
    根的所有子树根互为"兄弟"。同前所述理由, "右兄弟"指存储结构中确定的有相同双亲的下一棵子树的根。  
    InsertChild(&T, &p, i, c);
   初始条件:树 T 存在,p 指向T中某个结点,1≤i≤p 所指结点的度+1,
        非空树 c 与 T 不相交。
   操作结果:插入 c 为 T 中 p 所指结点的第 i 棵子树。

  DeleteChild(&T, &p, i);
   初始条件:树 T 存在,p 指向 T 中某个结点,1≤i≤p 指结点的度。
   操作结果:删除 T 中 p 所指结点的第 i 棵子树。

} ADT Tree
 
  对无序树而言,第i棵子树的概念也仅对存储结构中子树的次序而言。