#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
提交
取消