1#include<stdio.h>2#include<string.h>34typedefstructseiseki_list List;5structseiseki_list{6float gpa;/*累積GPA*/7int credit;/*累積単位数*/8char name[200];/*名前(アルファベット)*/9 List *next;/*次のセルへのポインタ*/10 List *left,*right;/*二分探索木で用いる部分木へのポインタ*/11};1213voidappend(List *list, List *node){14while(list->next !=NULL) list = list->next;15 list->next = node;16 node->next =NULL;17}1819voidvisit(List *list, List *node){20if(node ==NULL)return;21visit(list, node->right);22append(list, node);23visit(list, node->left);24}2526List *sort_tree(List *tree, List *next){27 List top;//nextのみをリストの最初のノードを指すために使用28 top.next =NULL;29visit(&top, tree);30append(&top, next);31return top.next;32}3334voidsetTest(List *dst,char*name, List *right, List *left){35strcpy(dst->name, name);36 dst->right = right;37 dst->left = left;38}3940intmain(){41 List datas[8], end,*list;4243setTest(&datas[0],"A",&datas[1],&datas[2]);44setTest(&datas[1],"B",&datas[3],&datas[4]);45setTest(&datas[2],"C",&datas[5],NULL);46setTest(&datas[3],"D",NULL,NULL);47setTest(&datas[4],"E",&datas[7],&datas[6]);48setTest(&datas[5],"F",NULL,NULL);49setTest(&datas[6],"G",NULL,NULL);50setTest(&datas[7],"H",NULL,NULL);5152setTest(&end,"end",NULL,NULL);5354 list =sort_tree(datas,&end);5556// D B H E G A F C end なら OK57for(; list !=NULL; list=list->next)printf("%s\n", list->name);5859return0;60}