#include<stdio.h> struct tree { int data; int l_ch; int r_ch; }; void add_node(struct tree* arr_1,int *arr,int start_index,int index) { arr_1[index].data=arr[index]; if(arr_1[start_index].data<arr[index]) if(arr_1[start_index].r_ch==-1) arr_1[start_index].r_ch=index; else add_node(arr_1,arr,arr_1[start_index].r_ch,index); else if(arr_1[start_index].l_ch==-1) arr_1[start_index].l_ch=index; else add_node(arr_1,arr,arr_1[start_index].l_ch,index); } void creat_tree(struct tree arr_1[],int *arr,int size) { int index; for(index=0;index<size;index++) { if(index!=0) add_node(arr_1,arr,0,index); else arr_1[0].data=arr[0]; } } void init_tree(struct tree* arr_1,int size) { int index; for(index=0;index<size;index++) { arr_1[index].data=-1; arr_1[index].l_ch=-1; arr_1[index].r_ch=-1; } } void first_trav(struct tree* arr_1,int index) { printf("%d ",arr_1[index].data); if(arr_1[index].l_ch!=-1) first_trav(arr_1,arr_1[index].l_ch); if(arr_1[index].r_ch!=-1) first_trav(arr_1,arr_1[index].r_ch); } void mid_trav(struct tree* arr_1,int index) { if(arr_1[index].l_ch!=-1) mid_trav(arr_1,arr_1[index].l_ch); printf("%d ",arr_1[index].data); if(arr_1[index].r_ch!=-1) mid_trav(arr_1,arr_1[index].r_ch); } void last_trav(struct tree* arr_1,int index) { if(arr_1[index].l_ch!=-1) last_trav(arr_1,arr_1[index].l_ch); if(arr_1[index].r_ch!=-1) last_trav(arr_1,arr_1[index].r_ch); printf("%d ",arr_1[index].data); } void show_tree(struct tree* arr_1) { first_trav(arr_1,0); printf("\n"); mid_trav(arr_1,0); printf("\n"); last_trav(arr_1,0); printf("\n"); } int main() { int arr[10]={10,2,1,56,40,90,7,6}; struct tree arr_1[8]; init_tree(arr_1,sizeof(arr_1)/sizeof(arr_1[0])); creat_tree(arr_1,arr,sizeof(arr_1)/sizeof(arr_1[0])); show_tree(arr_1); }
原文:https://www.cnblogs.com/zgen1/p/14585448.html