[First Accepted Time: 2013/02/26]
1. Basic binary tree structure definition
//File name: binary_sort.h
#ifndef _BINARY_SORT_
#define _BINARY_SORT_
#include <stdio.h>
#include <stdlib.h>
struct binary_tree{
int data;
binary_tree* left;
binary_tree* right;
};
int read_data(char * file_name, int data[], int* length);
int in_traversal(struct binary_tree* b_tree);
struct binary_tree* create_bin_tree(int data[], int length);
int free_tree(struct binary_tree* b_tree);
#endif
2. Implementation of the binary tree structure
//File name: binary_sort.cpp
#include "binary_sort.h"
int read_data(char * file_name, int data[], int* length)
{
int temp = 0;
(*length) = 0;
FILE* fp = NULL;
if((fp = fopen(file_name, "r")) == NULL)
{
printf("File \"%s\" does not exist.", file_name);
exit(-1);
}
while(!(feof(fp)))
{
(*length)++;
fscanf(fp, "%d", &data[(*length) - 1]);
}
fclose(fp);
return 0;
}
struct binary_tree* create_bin_tree(int data[], int length)
{
int i = 0;
int flag = 0;
struct binary_tree* temp = NULL;
struct binary_tree* p_temp = NULL;
struct binary_tree* b_tree = NULL;
for(i = 0; i < length; i++)
{
flag = 0;
p_temp = b_tree;
while(p_temp != NULL)
{
if(data[i] < p_temp->data)
{
flag = 1;
if(p_temp->left != NULL) p_temp = p_temp->left;
else break;
}
else
{
flag = 2;
if(p_temp->right != NULL) p_temp = p_temp->right;
else break;
}
} //找到插入的位置
temp = (struct binary_tree *) malloc(sizeof(struct binary_tree));
if(temp == NULL)
{
printf("Malloc error.");
exit(-1);
}
temp->left = temp->right = NULL;
temp->data = data[i]; //新建待插入的节点
if(i == 0) b_tree =p_temp = temp; //若i=0,则直接赋值
else
{
if(flag == 1) p_temp->left = temp; //若flag=1,将节点插入到左子树
else if(flag == 2) p_temp->right = temp; //若flag=2,将节点插入到右子树
}
}
return b_tree;
}
int in_traversal(struct binary_tree* b_tree)
{
struct binary_tree* p_temp = b_tree;
if(p_temp != NULL)
{
in_traversal(p_temp->left);
printf("%d ", p_temp->data);
in_traversal(p_temp->right);
}
return 0;
}
int free_tree(struct binary_tree* b_tree)
{
if(b_tree != NULL)
{
free_tree(b_tree->left);
free_tree(b_tree->right);
free(b_tree);
}
return 0;
}
3. The test bench
// File name: main.cpp
#include "binary_sort.h"
#define MAX_LEN 1000
int main()
{
int length = 0;
int data[MAX_LEN] = {0};
char file_name[100] = "data.txt";
struct binary_tree* b_tree = NULL;
printf("Please enter the file name of the source data: ");
scanf("%s", file_name); //输入数据文件名
read_data( file_name, data, &length); //读取数据
b_tree = create_bin_tree(data, length); //创建二叉排序树
printf("The right order of data is:\n");
in_traversal(b_tree); //中序遍历打印二叉排序树
free_tree(b_tree); //释放二叉树的内存空间
return 0;
}
This program is well done by Sonia. It's another milestone in learning programming.
Congratulations and add oil !