#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int val;
struct Node *lchild, *rchild;
}Node, *Bptr;
int temp;
void CreatB(Bptr *p){
*p = (Node*)malloc(sizeof(Node));
(**p).val = temp;
(*p)->lchild = NULL;
(*p)->rchild = NULL;
}
void Insert(Bptr *p){
if(temp < (**p).val && (*p)->lchild != NULL){
Insert(&((*p)->lchild));
return;
}
else if(temp < (**p).val && (*p)->lchild == NULL){
CreatB(&((*p)->lchild));
return;
}
else if(temp > (**p).val && (*p)->rchild != NULL){
Insert(&((*p)->rchild));
return;
}
else if(temp > (**p).val && (*p)->rchild == NULL){
CreatB(&((*p)->rchild));
return;
}
}
void InOrd(Bptr p){
if(p != NULL){
InOrd(p->lchild);
printf("%d", p->val);
InOrd(p->rchild);
}
}
void main(){
Bptr p = NULL;
int n;
//int temp;
scanf("%d", &n);
scanf("%d", &temp);
CreatB(&p);
for(int i = 0; i < n-1; i++){
scanf("%d", &temp);
Insert(&p);
}
InOrd(p);
}
主体逻辑
先初始化一个根节点
void CreatB(Bptr *p){
*p = (Node*)malloc(sizeof(Node));
(**p).val = temp;
(*p)->lchild = NULL;
(*p)->rchild = NULL;
}
再调用插入函数,递归创建二叉排序树
void Insert(Bptr *p){
if(temp < (**p).val && (*p)->lchild != NULL){
Insert(&((*p)->lchild));
return;
}
else if(temp < (**p).val && (*p)->lchild == NULL){
CreatB(&((*p)->lchild));
return;
}
else if(temp > (**p).val && (*p)->rchild != NULL){
Insert(&((*p)->rchild));
return;
}
else if(temp > (**p).val && (*p)->rchild == NULL){
CreatB(&((*p)->rchild));
return;
}
}
最后中序遍历输出即可
void InOrd(Bptr p){
if(p != NULL){
InOrd(p->lchild);
printf("%d", p->val);
InOrd(p->rchild);
}
}