今天介绍下二叉排序树的建立与查找,很简单,主要是递归的思想
头文件bst.h
#ifndef bst_h
#define bst_h
#include<iostream>
using namespace std;
typedef int keyType;
typedef class node{
public:
keyType ele;
node* lchild;
node* rchild;
} BNode;
class BST{
public:
//将元素element插入二叉排序树T
void insertNode(BNode* &T,keyType element);
//中序遍历二叉排序树,打印每个元素
void printBST(BNode* T);
//二叉排序树的查找
BNode* search(BNode* T,keyType e);
};
void BST::insertNode(BNode* &T,keyType element){
if(T==NULL){
BNode* p=(BNode*)malloc(sizeof(BNode));
p->ele=element;
p->lchild=NULL;
p->rchild=NULL;
T=p;
}
else if(T->ele>element){
insertNode(T->lchild,element);
}
else {
insertNode(T->rchild,element);
}
}
void BST::printBST(BNode* T){
if(T!=NULL){
printBST(T->lchild);
//打印根元素
cout<<T->ele<<" ";
printBST(T->rchild);
}
}
BNode* BST::search(BNode* T,keyType e){
if(T==NULL){
return NULL;
}
else if(T->ele<e){
return search(T->rchild,e);
}
else if(T->ele>e){
return search(T->lchild,e);
}
else{
return T;
}
}
#endif
//主文件main.cpp
#include "bst.h"
int main(){
int a[]={7,2,9,4,1,6,5,3,8};
BST bst;
BNode* T=NULL;
for(int i=0;i<9;i++){
bst.insertNode(T,a[i]);
}
bst.printBST(T);
cout<<endl;
cout<<"----二叉查找树----"<<endl;
BNode* r=bst.search(T,5);
cout<<"查找到的数字是:"<<r->ele<<endl;
return 0;
}
结果