}
else { }
找某人所有祖先的代码:
p=p->lchild; if(p==NULL)
printf(\没有妻子\\n\
else { }
p=p->rchild; if(p==NULL)
printf(\没有儿子!\\n\else { }
printf(\的儿子:\while(p!=NULL) { }
printf(\
printf(\p=p->rchild;
void Ancestor(BTree *bt) {
BTree *p;
char xm[NAMEWIDTH]; printf(\输入姓名:\scanf(\p=FindNode(bt,xm);
9
}
if(p!=NULL)
Path(bt,p);
else
printf(\不存在%s\\n\
void DelAll(FamType fam[],int &n) { }
FILE *fp;
if((fp=fopen(\{ } n=0; fclose(fp);
printf(\不能打开家谱文件\\n\return;
2.7源程序
#include
#define NAMEWIDTH 10 typedef struct fnode
{ char father[NAMEWIDTH]; char wife[NAMEWIDTH]; char son[NAMEWIDTH]; }FamType;
typedef struct tnode {
char name[NAMEWIDTH]; struct tnode *lchild,*rchild; }BTree;
BTree *CreatBTree(char *root,FamType fam[],int n) {
10
int i=0,j;
BTree *bt,*p;
bt=(BTree *)malloc(sizeof(BTree)); strcpy(bt->name,root);
bt->lchild=bt->rchild=NULL;
while(i
return(bt); }
BTree *FindNode(BTree *bt,char xm[]) {
BTree *p=bt; if(p==NULL)
return(NULL); else { if(strcmp(p->name,xm)==0) return(p); else { bt=FindNode(p->lchild,xm); if(bt!=NULL) return(bt); else return(FindNode(p->rchild,xm)); } } }
void FindSon(BTree *bt) {
char xm[NAMEWIDTH];
11
BTree *p;
printf(\父亲姓名:\ scanf(\ p=FindNode(bt,xm); if(p==NULL) printf(\不存在%s的父亲!\\n\ else { p=p->lchild; if(p==NULL) printf(\没有妻子\\n\ else { p=p->rchild; if(p==NULL) printf(\没有儿子!\\n\ else { printf(\的儿子:\ while(p!=NULL) { printf(\ p=p->rchild; } printf(\ } } } }
int Path(BTree *bt,BTree *s) {
BTree *St[MaxSize]; BTree *p;
int i,flag,top= -1; do { while(bt) { top++; St[top]=bt; bt=bt->lchild; } p=NULL; flag=1;
12
while(top!=-1 && flag) { bt=St[top]; if(bt->rchild==p) { if(bt==s) { printf(\所有祖先:\ for(i=0;i
}while(top!=-1); return 0; }
void Ancestor(BTree *bt) {
BTree *p;
char xm[NAMEWIDTH]; printf(\输入姓名:\ scanf(\ p=FindNode(bt,xm); if(p!=NULL) Path(bt,p); else printf(\不存在%s\\n\}
void DelAll(FamType fam[],int &n) {
FILE *fp;
if((fp=fopen(\
13