一.实验目的
巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。
1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。
2.学习树的相关知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
二.实验时间
准备时间为第10周到第12前半周,具体集中实验时间为12周周四。2个学时。
三.实验内容
1.自己设计一个二叉树,深度最少为4,请递归算法分别用前序、中序、后序遍历输出树结点。
2.写程序判定出六枚硬币中的一枚假硬币。参照课本P136页8枚硬币的判定方法。
3.自己确定2n(大小自己确定)个同学参加学校羽毛球淘汰比赛,请定程序,存放各队员比赛结果,并根据结果确定冠亚军。
第一题是必做题,第二题和第三题选做题。选做并做对者每题奖励5分。
四.参考资料
实验教材P207到218
五.实验结果
实验1:
#include<iostream.h> struct BiNode { char data; BiNode *lchild,*rchild; }; class BiTree { public: BiTree(){root=Creat(root);} ~BiTree(){Release(root);} void PreOrder(){PreOrder(root);} void InOrder(){InOrder(root);} void PostOrder(){PostOrder(root);} private: BiNode *root; BiNode *Creat(BiNode *bt); void Release(BiNode *bt); void PreOrder(BiNode *bt); void InOrder(BiNode *bt); void PostOrder(BiNode *bt); }; BiNode *BiTree::Creat(BiNode *bt) { char ch; cin>>ch; if(ch=='#')return NULL; else { bt=new BiNode; bt->data=ch; bt->lchild=Creat(bt->lchild); bt->rchild=Creat(bt->rchild); } return bt; } void BiTree::Release(BiNode *bt) { if(bt!=NULL) { Release(bt->lchild); Release(bt->rchild); delete bt; } } void BiTree::PreOrder(BiNode *bt) { if(bt==NULL) return; else { cout<<bt->data<<" "; PreOrder(bt->lchild); PreOrder(bt->rchild); } } void BiTree::InOrder(BiNode *bt) { if(bt==NULL) return; else { InOrder(bt->lchild); cout<<bt->data<<" "; InOrder(bt->rchild); } } void BiTree::PostOrder(BiNode *bt) { if(bt==NULL) return; else { PostOrder(bt->lchild); PostOrder(bt->rchild); cout<<bt->data<<" "; } } int main() { cout<<"请输入创建一棵二叉树的结点数据"<<endl; BiTree T; cout<<"-----前序遍历-----"<<endl; T.PreOrder(); cout<<endl; cout<<"-----中序遍历-----"<<endl; T.InOrder(); cout<<endl; cout<<"-----后序遍历-----"<<endl; T.PostOrder(); cout<<endl; return 0; }
实验2:
#include<iostream.h> int flag=0; int sum(int a[],int p,int q) { int sum=0; for(int i=p;i<=q;i++) sum+=a[i]; return sum; } int compare(int a[],int q) { int i,H,L; i=(q+1)%6; if(a[p]>a[q]) { H=p; L=q; } else { H=q; L=p; } if(a[H]>a[i]) { flag=1; return H; } else { flag=0; return L; } } void sixcoin(int c[]) { int t; if(sum(c,1)>sum(c,2,3)) { if(c[0]>c[2]) t=compare(c,2); if(c[0]<c[2]) t=compare(c,2); if(c[0]==c[2]) t=compare(c,1,3); } if(sum(c,1)==sum(c,3)) t=compare(c,4,5); if(sum(c,1)<sum(c,3); } if(flag==1) cout<<"the false coin is Heavy.n"; if(flag==0) cout<<"the false coin is Light.n"; cout<<"the false coin is c["<<t<<"]."<<endl; } int main() { int c[6]; cout<<"请输入六枚硬币:"<<endl; for(int i=0;i<6;i++) { cout<<"c["<<i<<"]="; cin>>c[i]; } sixcoin(c); return 0; }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|