本题目构造一棵二叉检索树。要求读入n个整数,以0结束。最后输出这棵树的先序序列。
输入格式:
输入n个整数,以0表示结束,数据间以空格隔开。
输出格式:
输出这棵树的先序序列,以一个空格隔开,结尾也有一个空格。
输入样例:
34 50 23 12 30 23 0
输出样例:
34 23 12 23 30 50
代码实现:
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
node * lson;
node * rson;
}Bnode,*Bptr;
void preorder(Bptr p){
if(p!=NULL){
printf("%d ",p->data);
preorder(p->lson);
preorder(p->rson);
}
}
void creat(Bptr *p, int n){ //要用双重指针,不然形参无法改变到实际main中
if(*p == NULL){
*p = (Bptr)malloc(sizeof(Bnode));
(*p)->data = n;
(*p)->lson = NULL;
(*p)->rson = NULL;
}else{
if(n <= (*p)->data){ //我了个骚缸啊,检索树对相同的元素的处理和之前写的二叉树不一样
creat(&((*p)->lson), n);
}else{
creat(&((*p)->rson), n);
}
}
} //前面的*p换成* &p,函数里面就不会这么丑陋了但我懒得改了
int main(){
Bptr p=NULL;
int n=0;
scanf("%d",&n);
while(n!=0){
creat(&p,n);
scanf("%d",&n);
}
preorder(p);
return 0;
}//别问7-9哪里去了问就是还不会