题目
设计一个算法,在二叉排序树bt上查找关键字为k的记录,成功时返回该结点指针,否则返回NULL
代码
#include <iostream>
using namespace std;
//定义二叉树结点
typedef struct BSTNode{
int data;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
int BST_Insert(BSTree &T,int k){
if(T==NULL){
T=(BSTNode *)malloc(sizeof(BSTNode));
T->data=k;
T->lchild=NULL;
T->rchild=NULL;
return 1;
}else if(k==T->data){
return 0; //存在相同的几关键字,插入失败!
}else if(k<T->data){
return BST_Insert(T->lchild,k);
}else{
return BST_Insert(T->rchild,k);
}
}
void createBSTree(BSTree &T){
T=NULL;
int key;
cin>>key;
while(key!=999){
BST_Insert(T,key);
cin>>key;
}
}
//打印输出
void dispBSTree(BSTree T){
if(T!=NULL){
cout<<T->data<<" ";
dispBSTree(T->lchild);
dispBSTree(T->rchild);
}
}
/**
算法主体
**/
BSTree searchBST(BSTree T,int key){
if(T==NULL)
return NULL;
if(T->data==key)
return T;
else if(key<T->data)
return searchBST(T->lchild,key);
else
return searchBST(T->rchild,key);
}
int main() {
BSTree T;
createBSTree(T);
dispBSTree(T);
BSTree r= searchBST(T,2);
cout<<endl;
cout<<"结果为"<<r->data;
return 0;
}