二叉排序树
概念
一颗二叉树,每个节点对应一个关键码,且每个结点左子树中所有结点的码值都小于关键码,右子树中所有节点码值都大于关键码值,这样的树叫做二叉排序树。
利用二叉排序树,可以将目录表组织成二叉树的形式,既有顺序表那样较高的检索效率,又有链表哪有插入删除灵活的特性。
二叉排序树的构造
二叉排序树的存储结构 使用二叉链表
typedef int keytype;
typedef struct node{
keytype key; //关键字项
datatype other; //其他数据项
struct node *lchild,*rchild;
}bstnode;
二叉排序树构造的算法描述:
对于任意一组数据元素{R1,R2,…,Rn} :
1、令R1为二叉树的根
2、若R2>R1, 令R2为R1的右子树的根节点,否则作为左子树的根节点
3、对于n个结点,依次与前面生成的结点比较以确定输入结点的位置
生成二叉排序树的代码分为两个函数,一个是插入函数,先定位插入值的位置,再选择插入到左子树还是右子树。另一个是生成二叉排序树的函数,输入结点后调用插入函数。
bstnode* insertBst(bstnode *t,bstnode *s){
//t是已有的树,s是要插入的结点
bstnode *p,*f;
p=t;
while(p!=NULL){
//定位
f=p;
if(s->key==p->key) return t; //s根节点的值与原树根节点相同 直接返回原