实验五:树和二叉树实验——信管1134--05

《数据结构》实验五:   树和二叉树实验

一..实验目的

     巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。

1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。

2.学习树的相关知识来解决实际问题。

3.进一步巩固程序调试方法。

4.进一步巩固模板程序设计。

二.实验时间

   准备时间为第10周到第12前半周,具体集中实验时间为12周周四。2个学时。

三..实验内容

1.自己设计一个二叉树,深度最少为4,请递归算法分别用前序、中序、后序遍历输出树结点。

2.写程序判定出六枚硬币中的一枚假硬币。参照课本P136页8枚硬币的判定方法。

3. 自己确定2n(大小自己确定)个同学参加学校羽毛球淘汰比赛,请定程序,存放各队员比赛结果,并根据结果确定冠亚军。全

 第一题是必做题,第二题和第三题选做题。选做并做对者每题奖励5分。

四.参考资料

    实验教材P207到218


#include  
using namespace std;  
  
template   
struct BI  
{  
    datatype data;  
    BI* lchild;  
    BI* rchild;  
};  
  
template   
class tree  
{  
public:  
    tree(){root=create(root);}  
    ~tree(){release(root);}  
    void preorder(){preorder1(root);}  
    void inorder(){inorder1(root);}  
    void postorder(){postorder1(root);}  
    void leverorder();  
    int depth1(BI*bt);  
    BI*root;  
    BI*create(BI*bt);  
    void release(BI*bt);  
    void preorder1(BI*bt);  
    void inorder1(BI*bt);  
    void postorder1(BI*bt);  
      
};  
  
template   
BI* tree::create(BI*bt)  
{  
    datatype ch;  
    cin>>ch;  
    if(ch=='#')bt=NULL;  
    else{  
        bt=new BI;  
        bt->data=ch;  
        bt->lchild=create(bt->lchild);  
        bt->rchild=create(bt->rchild);  
    }  
    return bt;  
}  
template   
void tree :: release(BI*bt)  
{  
    if(bt!=NULL)  
    {  
        release(bt->lchild);  
        release(bt->rchild);  
        delete bt;  
    }  
}  
template   
void tree::preorder1(BI*bt)  
{  
    if(bt==NULL)return;  
    else{  
        cout<data<<" ";  
        preorder1(bt->lchild);  
        preorder1(bt->rchild);  
    }  
}  
template   
void tree::inorder1(BI*bt)  
{  
    if(bt==NULL)return;  
    else{  
        inorder1(bt->lchild);  
        cout<data<<" ";  
        inorder1(bt->rchild);  
    }  
}  
template   
void tree::postorder1(BI*bt)  
{  
    if(bt==NULL)return;  
    else{  
        postorder1(bt->lchild);  
        postorder1(bt->rchild);  
        cout<data<<" ";  
    }  
}  
template   
void tree::leverorder()  
{  
    int front,rear;  
    BI*Q[100];  
    front=rear=-1;  
    if(root==NULL)return;  
    Q[++rear]=root;  
    while(front!=rear)  
    {  
        BI* q;  
        q=Q[++front];  
        cout<data<<" ";  
        if(q->lchild!=NULL)Q[++rear]=q->lchild;  
        if(q->rchild!=NULL)Q[++rear]=q->rchild;  
    }  
}  
template   
int tree::depth1(BI*bt)  
{  
    int hl,hr,max;   
    if(bt)  
    {  
        hl=depth1(bt->lchild);  
        hr=depth1(bt->rchild);  
        max=hl>hr?hl:hr;  
        return max+1;  
    }  
    else return 0;  
}  
  
void main()  
{  
    cout<<"请构造一个二叉树:"< t1;  
    cout<


实验五:树和二叉树实验——信管1134--05_第1张图片

你可能感兴趣的:(数据结构)