BST 二叉排序树
数据结构
typedef struct BSTNode{
int key;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
查找操作
递归实现
BSTNode *BST_Search(BSTree T, int key){
if(T==NULL)
return T;
if(T->key == key)
return T;
else if(key > T->key)
return BST_Search(T->rchild, key)
else if(key < T->key)
return BST_Search(T->lchild, key)
}
非递归实现
BSTNode *BST_Search(BSTree T, int key){
while(T->key!=key && T!=NULL){
if(key>T->key)
T=T->rchild;
else if(key<T->key)
T=T->lchild;
}
return T;
}
插入操作
递归
int BST_Insert(BSTree *T, int key){
if(T == NULL){
T=(BSTNode*)malloc(sizeof(BSTNode));
T->key = key;
T->rchild = T->lchild = null;
return 1;
}
else if(k == T->key)
return 0
else if(k > T->key)
BST_Insert(T->rchild, key);
else
BST_Insert(T->lchild, key);
}
非递归
int BST_Insert(BSTree &T, int key){
BSTNode *p = T, *prep;
int flag;
while(p->key != key && p!=NULL){
prep=p;
if(key > p->key){
p = p->rchild;
flag=1;}
else(key < p->key){
p = p->lchild;
flag=0;
}
}
if(p!=NULL) return 0;
else{
p = (BSTNode*)malloc(sizeof(BSTNode));
p->key = key;
p->lchild = p->rchild = NULL;
if(flag==0) prep->lchild=p;
else prep->rchild=p;
return 1;
}
}