#ifndef SORT_BINARY_TREE_H
#define SORT_BINARY_TREE_H
struct sbt{
struct sbt * left;
struct sbt * right;
int content;
};
struct sbt * init(int * p ,int n);
struct sbt * compare(struct sbt * root , struct sbt * np);
int pretravers(struct sbt * root);
int medtravers(struct sbt * root);
int backtravers(struct sbt * root);
#endif
#include <stdio.h>
#include <stdlib.h>
#include "sort_binary_tree.h"
#define N 10
/*
*sort binary tree
*author 2 suilingxi
*2014-1-28
*/
int main(){
int array[N];
printf("please enter 10 number:\n");
for(int i=0;i<N;i++){
scanf("%d",&array[i]);
}
struct sbt * head;
head=init(array,N);
printf("pretravers:\n");
pretravers(head);
printf("\n");
printf("medtravers:\n");
medtravers(head);
printf("\n");
printf("backtravers:\n");
backtravers(head);
printf("\n");
return 0;
}
struct sbt * init(int * p , int n){
struct sbt * root;
if(n==0){
return NULL;
}else{
struct sbt * node;
node=(struct sbt *)malloc(sizeof(struct sbt));
node->content=*p;
node->left=NULL;
node->right=NULL;
root=node;
for(int i=1;i<n;i++){
struct sbt * medium;
medium=(struct sbt *)malloc(sizeof(struct sbt));
medium->content=*(p+i);
medium->left=NULL;
medium->right=NULL;
struct sbt * tmp;
tmp=compare(root,medium);
if((tmp->content < medium->content)&&(tmp->right == NULL)){
tmp->right=medium;
}else if((tmp->content > medium->content)&&(tmp->left == NULL)){
tmp->left=medium;
}else if(tmp->content==medium->content){
free(medium);
medium=NULL;
}
}
}
return root;
}
struct sbt * compare(struct sbt * root , struct sbt * np){
struct sbt * pointer;
if((root->left != NULL)&&(root->right != NULL)){
if(root->content > np->content){
return compare(root->left,np);
}else if(root->content < np->content){
return compare(root->right,np);
}
}
if((root->right == NULL)&&(np->content >= root->content)){
pointer=root;
return pointer;
}else if((root->left == NULL)&&(root->content >= np->content)){
pointer=root;
return pointer;
}else if((root->left != NULL)&&(np->content < root->content)){
return compare(root->left,np);
}else if((root->right != NULL)&&(np->content > root->content)){
return compare(root->right,np);
}
}
int pretravers(struct sbt * root){
if(root==NULL){
return 0;
}
printf("%d-->",root->content);
pretravers(root->left);
pretravers(root->right);
}
int medtravers(struct sbt * root){
if(root == NULL){
return 0;
}
medtravers(root->left);
printf("%d-->",root->content);
medtravers(root->right);
}
int backtravers(struct sbt * root){
if(root==NULL){
return 0;
}
backtravers(root->left);
backtravers(root->right);
printf("%d-->",root->content);
}