假设一个家族成员如右图所示(其中父母为一个结点),每对父母最多只有两个孩子:
1.以先根遍历序列输入家族中所有成员信息,包括:姓名和年龄(只存储父亲姓名和年龄) ,成员个数为10人;
2.统计家族没有孩子的成员个数。
3.查找某一个家庭成员,输出他的年龄。
#include <iostream>
using namespace std;
typedef int datatype;
typedef struct node *pointer;
struct node{
char data;
datatype age;
pointer lchild,rchild;
};
typedef pointer bitree;
bitree pre_creat(){ //先根遍历生成二叉树
bitree t;
char ch;
cout<<"请输入要添加的家庭成员名字:"<<endl;
cin>>ch;
if(ch!='#')
cout<<"请输入年龄:"<<endl;
int a;
cin>>a;
if(ch=='@')return NULL;
{
t=new node;
t->data=ch;
t->age=a;
t->lchild=pre_creat();
t->rchild=pre_creat();
}
return t;
}
int leaf(bitree t){ //求叶子结点数
int l,r;
if(t==NULL) return 0;
if(t->lchild==NULL&&t->rchild==NULL)
return 1;
l=leaf(t->lchild);
r=leaf(t->rchild);
return l+r;
}
pointer search(bitree t,char x){
bitree p;//p存放值为x的结点的指针
if(t==NULL) return NULL;
if(t->data==x) return t;
(p=search (t->lchild,x))||(p=search (t->rchild,x));
return p;
}
int main()
{
int x;
bitree T;T=pre_creat();
cout<<"请输入要寻找的家庭成员的名字:"<<endl;
int leaf(bitree t);
cin>>x;
pointer search(bitree t,char x);
return 0;
}
程序没错,但调用出了问题,求各位帮忙看看。