数据结构与算法 ~ 查找 ~ 二叉排序树
/*search--binsorttree*/
#include<stdio.h>
#include<stdlib.h>
struct headnode{
int data;
struct treenode *next;
};
typedef struct headnode *Headnode;
struct treenode{
int data;
struct treenode *left;
struct treenode *right;
};
typedef struct treenode *Bitree;
/*创建二叉排序树*/
void create_bstree(Headnode head){
int e;
Bitree newnode,pointer,perpointer;
printf("\n=======创建排序二叉树============\n");
printf("\n请输入数值(exit for 0):");
scanf("%d",&e);
while(e!=0){
newnode=(Bitree)malloc(sizeof(struct treenode));
newnode->data=e;
newnode->left=NULL;
newnode->right=NULL;
if (head->data==0){
head->next=newnode;
head->data++;
}else {
pointer=head->next;
perpointer=pointer;
while (pointer!=NULL && pointer->data!=e){
if( e<(pointer->data) ){
perpointer=pointer;
pointer=pointer->left;
}else{
perpointer=pointer;
pointer=pointer->right;
}
}/*while*/
if (perpointer->data!=e){
if (e<perpointer->data)
perpointer->left=newnode;
else
perpointer->right=newnode;
head->data++;
}else {
printf("输入的数值重复!");
free(newnode);
}
}
printf("\n请输入数值(exit for 0):");
scanf("%d",&e);
}/*while*/
printf("\n二叉排序树长度是%d",head->data);
printf("\n=====二叉排序树创建结束=======\n");
}/*create bitree*/
void PreorderTraverse(Bitree prenode){
if (prenode!=NULL){
printf("%4d",prenode->data);
PreorderTraverse(prenode->left);
PreorderTraverse(prenode->right);
}/*if*/
}/*PreorderTraverse*/
void InorderTraverse(Bitree prenode){
if (prenode!=NULL){
InorderTraverse(prenode->left);
printf("%4d",prenode->data);
InorderTraverse(prenode->right);
}/*if*/
}/*InorderTraverse*/
void PostorderTraverse(Bitree prenode){
if (prenode!=NULL){
PostorderTraverse(prenode->left);
PostorderTraverse(prenode->right);
printf("%4d",prenode->data);
}/*if*/
}/*PostorderTraverse*/
int formatList(){
int e;
printf("\n=====================================");
printf("\n1---前序输出");
printf("\n2---中序输出");
printf("\n3---后序输出");
printf("\n0---退出");
printf("\n==========