数据结构 - 二叉搜索树

 

树的抽象数据类型

定义:树是由一个根结点和若干棵子树构成。树中结点具有相同数据类型及层次关系。

操作:

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

类型属性:

二叉树每个节点有两个作为其后代的树,称为左子树和右子树,每一个子树本身又一是个二叉树,它的每个节点包含一个项目,它的所有左子树项目排在根项目的前面,而根项目排在所有子树项目的前面。

 

类型操作:

  • 把树初始化为空树
  • 确定树是否为空
  • 确定树是否为满
  • 确定树中项目的个数
  • 向树中添加一个项目
  • 向树中删除一个项目
  • 向树中搜索一个项目
  • 访问树中每一个项目
  • 清空树

 

posted @ 2016-10-28 10:50  elewei  阅读(257)  评论(0)    收藏  举报