//二叉排序树
//二叉排序树结点
typedef struct BSTNode{
int key;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
//在二叉排序树中查找值为key的结点---非递归
BSTNode *BST_Search(BSTree T,int key){
while(T!=NULL && key!=T->key){ //树空,且key不等于根节点的值
if(key<T->key){ //key小于根节点的值
T=T->lchild;
}else{ //key大于根节点的值
T=T->rchild;
}
}
return T;
}
//在二叉排序树中查找值为key的结点--递归
BSTNode *BSTSearch(BSTree T,int key){
if(T==NULL){
return NULL;
}
if(key==T->key){
return T;
}else if(key<T->key){
return BSTSearch(T->lchild,key);
}else if(key>T->key){
return BSTSearch(T->rchild,key);
}
}
//在二叉排序树中插入一个关键字为k的结点(递归实现)
int BST_Insert(BSTree &T,int k){
if(T==NULL){
T=(BSTree)malloc(sizeof(BSTNode));
T->key=k;
T->lchild=NULL;
T->rchild=NULL;
return 1; //返回1插入成功
}else if(k==T->key){
return 0; //数中存在相同关键字的结点,失败
}else if(k<T->key){
return BST_Insert(T->lchild,k);
}else if(k>T->key){
return BST_Insert(T->rchild,k);
}
}
二叉排序树的构造
最新推荐文章于 2023-10-01 10:41:33 发布