数据库实验(五):二叉链表

一、实验目的

1、熟练理解树和二叉树的相关概念,掌握的存储结构和相关操作实现;

2、掌握树的顺序结构的实现;

3、学会运用树的知识解决实际问题

二、实验内容

1、自己确定一个二叉树(树结点类型、数目和结构自定)利用链式存储结构方法存储。实现树的构造,并完成:

1)用前序遍历、中序遍历、后序遍历输出结点数据;

2)以合理的格式,输出各个结点和双亲、孩子结点信息;

3)输出所有的叶子结点信息;

三:实验例子

   课本108页 图5-11


实验代码

#include <iostream>
using namespace std;

template <class Datatype>
struct BiNode
{
    Datatype data;
    BiNode<Datatype> *lchild ,*rchild;
};

template <class Datatype>
class Bitree
{
    public:
    Bitree( ){root=create(root);}
    ~Bitree( ){Release(root);}
    void Preorder( ){Preorder(root);}
    void Inorder( ) {Inorder(root);}
    void Postorder( ) {Postorder(root);}
    private:
    BiNode<Datatype> * root;
    BiNode<Datatype> *create(BiNode<Datatype> *bt);
    void Release (BiNode<Datatype> *bt);
    void Preorder(BiNode<Datatype> *bt);
    void Inorder (BiNode<Datatype> *bt);
    void Postorder(BiNode<Datatype> *bt);
};

template <class Datatype>
void Bitree<Datatype>::Preorder(BiNode <Datatype> *bt)
{
    if(bt==NULL) return;
    {
        cout<< bt->data;
        Preorder(bt->lchild);
        Preorder(bt->rchild);
    }
}

template <class Datatype>
void Bitree<Datatype>::Inorder(BiNode<Datatype> *bt)
{
    if(bt==NULL) return;
    {
        Inorder(bt->lchild);
        cout<<bt->data;
        Inorder(bt->rchild);
    }
}


template <class Datatype>
void Bitree<Datatype>::Postorder(BiNode<Datatype> *bt)
{
    if(bt==NULL) return;
    {
        Postorder(bt->lchild);
        Postorder(bt->rchild);
        cout<<bt->data;
    }
}

template <class Datatype>
BiNode<Datatype> *Bitree<Datatype>::create(BiNode<Datatype> *bt)
{
    Datatype ch;
    cin>> ch;
    if(ch=='#') bt=NULL;
    else{
    bt=new BiNode<Datatype> ;
    bt->data=ch;
    bt->lchild=create(bt->lchild);
    bt->rchild=create(bt->rchild);
    }
    return bt;
}

template<class Datatype>
void Bitree<Datatype>::Release(BiNode<Datatype> *bt)
{
    if(bt!=NULL)
    {
        Release(bt->lchild);
        Release(bt->rchild);
        delete bt;
    }
}

int main()
{
    cout<<" 新建的二叉树为: "<<endl;
    Bitree <char> a;
    cout<<"前序遍历为:"<<endl;
    a.Preorder();
    cout<<endl;
    cout<<"中序遍历为:"<<endl;
    a.Inorder();
    cout<<endl;
    cout<<"后序遍历为:"<<endl;
    a.Postorder();
    cout<<endl;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值