/*采用二叉树表示一个家谱关系。要求程序具有如下功能:
(1) 文件操作功能:记录输入、记录输出,清除全部文件记录和将家谱记录存盘。
(2) 家谱操作功能:用括号表示法输出家谱二叉树,查找某人所有的儿子,查找某人所有的祖先。*/
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
typedef struct Node
{
int degree;//人员所在代数
char data;//人员标志
struct Node *lchild;//data的孩子
struct Node *rchild;//data的兄弟
}BTNode;
#define max 100
int choose;
char X;
void CreatBTNode(BTNode **b,char *str);//创建记录
BTNode* SearchX(BTNode *b,char X);//查找记录
void InputBTNode(BTNode **b,char *str);//1.记录输入
void OutputBTNode(BTNode **b,char *str);//2.记录输出
void Store(BTNode *b,char *str);//3.家谱记录存盘
void DispTree(BTNode *b);//4.用括号法输出家谱
void SearchXSon(BTNode *b,char X);//5.查找某人的儿子
void SearchXAncestor(BTNode *b,char X);//6.查找某人的祖先
void Distory(BTNode **b,char *str);//7.清除全部文件记录
int main()
{BTNode *b=NULL;
char *str=(char*)malloc(max*sizeof(char));
str[0]='\0';
cout<<"--------------------------------------------------------------------"<<endl;
cout<<"0.退出"<<endl;
cout<<"1.记录输入:\t"<<endl;
cout<<"2.记录输出:\t"<<endl;
cout<<"3.家谱记录存盘:\t"<<endl;
cout<<"4.用括号法输出家谱:\t"<<endl;
cout<<"5.查找某人的儿子:\t"<<endl;
cout<<"6.查找某人的祖先:\t"<<endl;
cout<<"7.清除全部文件记录:\n"<<endl;
cout<<"-------------------------------------------------------------------"<<endl;
cout<<"Please choose the operation you want to do. "<<endl;
cout<<"choose=";
cin>>choose;
while(choose)
{switch(choose)
{
case 1:
InputBTNode(&b,str);break;
case 2:
OutputBTNode(&b,str);break;
case 3:
Store(b,str);
printf("文件已经保存!");