#include"stdio.h"
#include"stdlib.h"#include"string.h"
#define NUM 5
typedef struct BTNode
{
int key;
struct BTNode *lchild,*rchild;
}BTNode;
void BTInsert(BTNode *&T,int key);//插入节点
void CreateBTNode(BTNode *&T);//构造二叉排序树
void PrintfBTNode(BTNode *T);//中序遍历二叉排序树
BTNode *BTSearch(BTNode *T,int key);//查找
int CountBTNode(BTNode *T,int key);//查找小于key的元素个数
int main()
{
BTNode *T;
int sum=0;
T=NULL;
printf("\n----------构造二叉排序树-------\n");
CreateBTNode(T);
printf("\n----------打印二叉排序树-------\n");
PrintfBTNode(T);
printf("\n----------查找-------\n");
printf("%d",BTSearch(T,4)->key);
printf("\n----------查找小于3的元素个数-------\n");
printf("%d\t",CountBTNode(T,3));
system("pause");
return 0;
}
//插入节点
void BTInsert(BTNode *&T,int key)
{
if(T==NULL)
{
T=(BTNode *)malloc(sizeof(BTNode));
T->key=key;
T->lchild=T->rchild=NULL;
}
else
{
if(T->key > key)
BTInsert(T->lchild,key);
else if(T->key <key)
BTInsert(T->rchild,key);
}
}
//构造二叉排序树
void CreateBTNode(BTNode *&T)
{
int i,x;
for(i=0;i<NUM;i++)
{
printf("请输入数据:\n");
scanf("%d",&x);
BTInsert(T,x);
}
}
//中序遍历二叉排序树
void PrintfBTNode(BTNode *T)
{
if(T)
{
PrintfBTNode(T->lchild);
printf("%d\t",T->key);
PrintfBTNode(T->rchild);
}
}
//查找
BTNode *BTSearch(BTNode *T,int key)
{
if(T==NULL)
return 0;
else
{
if(T->key==key)
return T;
else if(T->key > key)
return BTSearch(T->lchild,key);
else
return BTSearch(T->rchild,key);
}
}
//查找小于key的元素个数
int CountBTNode(BTNode *T,int key)
{
if(T)
{
if(T->key > key)
return CountBTNode(T->lchild,key);
else if(T->key < key )
return CountBTNode(T->lchild,key)+1+CountBTNode(T->rchild,key);
else
return CountBTNode(T->lchild,key)+CountBTNode(T->rchild,key);
}
else
return 0;
}