一、实验目的
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;
}