本题目构造一棵二叉检索树。要求读入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哪里去了问就是还不会