#include
#include
#include
struct node;
node *creat();//建立祖先
int add_child(node *head);//添加家庭成员
int add_brother(node *head);//添加兄弟成员
void print(node *head,char *x);//输出指定家庭成员
int beifen(node *p,char *x);//确定成员辈分
void print1(node *head);//先序遍历 输出家庭成员
void chengyuan(node *head,int s);//输出相应辈分成员
node *shanchu(node *head,char *s);//删除成员
struct node//结构体变量
{
char data[20];//家庭成员
int n;//辈分
node *lchild,*rchild;//左孩子是孩子,右孩子是兄弟
};
node *creat()//建立祖先
{
node *head;
head=(node *)malloc(sizeof(node));//分配存储空间
char s[20];
printf("输入祖先名字:");
scanf("%s",&s);
strcpy(head->data,s);// 赋值
head->n=1;//分配辈分
printf("祖先载入成功!\n");
return head;//返回祖先节点(根节点)
}
int add_child(node *head)//添加家庭成员 非递归法
{
char y[20],x[20];
node *p,*q;//定义新变量
q=head;
printf("输入加入父节点姓名:");
scanf("%s",&x);//输入父节点
p=(node *)malloc(sizeof(node));//动态分配存储空间
printf("输入要添加的孩子:");
scanf("%s",&y);//输入孩子信息
strcpy(p->data,y);//赋值到节点
p->lchild=NULL;//新节点左孩子为空
p->rchild=NULL;//新节点右孩子为空
while(q!=NULL)//循环左孩子查找
{
if(strcmp(x,q->data)==0)//比较
{
if(q->lchild==NULL)//如果此结点没有孩子则添加到左孩子
{
p->n=q->n+1;//孩子为父节点的辈分加1
q->lchild=p;//新