#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 5
typedef struct TNode
{
int data;
struct TNode *left;//指向左孩子结点
struct TNode *right;//指向右孩子结点
struct TNode *father;//指向父结点
}TNode_t , *pTNode_t;
void insertBST(int num,pTNode_t *root,pTNode_t father)
{//二叉排序树的插入
if (*root==NULL)
{
pTNode_t p=(pTNode_t)calloc(1,sizeof(TNode_t));
p->data=num;
p->father=father;
*root=p;
return;
}
if((*root)->data>num)
{
insertBST(num,&((*root)->left),(*root));
}
else
{
insertBST(num,&((*root)->right),(*root));
}
}
pTNode_t searchBST(int num,pTNode_t root)
{//二叉排序树的查找
if(root==NULL)
{
return NULL;
}
if(root->data>num)
{
return searchBST(num,root->left);
}
else if(root->data<num)
{
return searchBST(num,root->right);
}
else
{
return root;
}
}
void LNR(pTNode_t root)
{//中序遍历二叉树
if(root==NULL)
{
return;
}
LNR(root->left);
printf("%d ",root->data);
LNR(root->right);
}
int main()
{
srand(time(NULL));
pTNode_t root=NULL;
int data;
printf("插入顺序:");
for(int i=0;i<N;i++)
{
data=rand()%100;
printf("%d ",data);
insertBST(data,&root,NULL);//建立BST树
}
printf("\n中序遍历的结果:");
LNR(root);//中序遍历建好的BST树
printf("\n");
//查找BST中的值为data的结点
//data=22;
pTNode_t p=searchBST(data,root);
if(p==NULL)
{
printf("fail,no find %d",data);
}
else
{
printf("successful,%d",p->data);
}
return 0;
}
二叉排序树的插入和查找
最新推荐文章于 2023-12-23 00:58:54 发布