#include<stdio.h>#include<iostream.h>#include<string.h>#include<malloc.h>typedef struct node{char name;int age;struct node *lchild;struct node *rchild;}BTNode;struct data //定义输入数据类型{int key;char n;};int InsertBT(BTNode *&p,data); //插入结点void CreateBTNode(BTNode *&b,int i); //创建二叉树void DispBTNode(BTNode *b); //括号表示法输出二叉树bint BTNodeDepth(BTNode *b); //输出二叉树b的深度void AgeMin(BTNode *b); //查找并输出年龄最小的元素void AgeMax(BTNode *b); //查找并输出年龄最大的元素void main(){BTNode *b;data t;cout<<"(1)输入12个数据并生成二叉树b(先名后龄):"<<endl;CreateBTNode(b,12);cout<<"(2)括号表示法输出二叉树b:"<<endl;DispBTNode(b);cout<<"(3)二叉树b的深度:"<<BTNodeDepth(b)<<endl;cout<<"(4)年龄最小的元素:";AgeMin(b);cout<<"(5)年龄最大的元素:";AgeMax(b);cout<<"(6)插入{'郭',40}:";cin>>t.key>>t.n;InsertBT(b,t);DispBTNode(b);}int InsertBT(BTNode *&p,data e){if(p==NULL){p=(BTNode*)malloc(sizeof(BTNode));p->age=e.key;p->name=e.n;p->lchild=p->rchild=NULL;return 1;}else if(e.key==p->age) return 0; //有相同关键字结点,返回0else if(e.key<=p->age) return InsertBT(p->lchild,e); //插入*p的左子树中else return InsertBT(p->rchild,e); //插入*p的右子树中}void CreateBTNode(BTNode *&p,int i){BTNode *b=NULL;int j,k=0;data d[12];for(j=0;j<i;j++)cin>>d[j].n>>d[j].key;while(k<i){InsertBT(b,d[k]);k++;}}void DispBTNode(BTNode *b){if(b!=NULL){cout<<b->name;if(b->lchild!=NULL||b->rchild!=NULL){cout<<"(";DispBTNode(b->lchild);if(b->rchild!=NULL)cout<<",";DispBTNode(b->rchild);cout<<")";}}}int BTNodeDepth(BTNode *b){int lchilddep,rchilddep;if(b==NULL) return(0);else{lchilddep=BTNodeDepth(b->lchild);rchilddep=BTNodeDepth(b->rchild);return(lchilddep>rchilddep)?(lchilddep+1):(rchilddep+1);}}void AgeMin(BTNode *b){if(b->lchild!=NULL)AgeMin(b->lchild);elsecout<<b->name<<" "<<b->age<<endl;}void AgeMax(BTNode *b){if(b->rchild!=NULL)AgeMax(b->rchild);elsecout<<b->name<<" "<<b->age<<endl;}如输入:{“张”, 25}, {“王”, 18}, {“钟”, 2}, {“陈”, 46}, {“李”,53}, {“吴”, 39}, {“刘”, 4}, {“邓”, 74}, {“陆”, 32}, {“丁”, 11}, {“蒋”, 67}, {“洪”, 60},以age为关键字
1 回答
慕容708150
TA贡献1831条经验 获得超4个赞
程序有许多问题:
(1)首先,输入有误。这样的输入数据,直接用 cin>>d[j].n>>d[j].key; 输入,肯定是错误的,试想那些括号、分号、逗号怎么处理?还有,一个汉字不可能用一个 char 来存储。
(2)再看函数 void CreateBTNode(BTNode *&p,int i),明明有个参数p,函数里面却不用,哪有不出错的道理。也就是说,主函数中定义了 BTNode *b; 没有初始化,应该算是野指针,这个野指针,被传递给 CreateBTNode 函数,但该函数对此毫不理会,独自干了点什么,就结束了,所以,下面的调用 DispBTNode(b),明明是对着野指针做什么操作,能不出错么。
鉴于以上两条,下面的程序就不再分析了,请先改正上面的错误吧。
添加回答
举报
0/150
提交
取消