/*
二叉链表
*/
#include <iostream>
#include <string>
using namespace std;
template<typename T>
struct BiNode
{
T data;
BiNode<T>*lchild,*rchild;
};
template<typename T>
class BiTree
{
private:
BiNode<T>* root;
BiNode<T>* Creat();
void Release(BiNode<T>*bt);
void PreOrder(BiNode<T>*bt);
void InOrder(BiNode<T>*bt);
void PostOrder(BiNode<T>*bt);
public:
BiTree(){root=Creat();}
~BiTree(){Release(root);}
void PreOrder(){PreOrder(root);}
void InOrder(){InOrder(root);}
void PostOrder(){PostOrder(root);}
void LevelOrder();
};
template<typename T>
BiNode<T>* BiTree<T>::Creat()
{
BiNode<T>* bt;
char ch;
cin>>ch;
if(ch=='#')
bt=nullptr;
else
{
bt=new BiNode<T>;
bt->data=ch;
bt->lchild=Creat();
bt->rchild=Creat();
}
return bt;
}
template<typename T>
void BiTree<T>::Release(BiNode<T> *bt)
{
if(bt==nullptr)return;
else
{
Release(bt->lchild);
Release(bt->rchild);
delete bt;
}
}
template<typename T>
void BiTree<T>::PreOrder(BiNode<T>*bt)
{
if(bt==nullptr)return;
else
{
cout<<bt->data<<"\t";
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
template<typename T>
void BiTree<T>::InOrder(BiNode<T>*bt)
{
if(bt==nullptr)return;
else
{
InOrder(bt->lchild);
cout<<bt->data<<"\t";
InOrder(bt->rchild);
}
}
template<typename T>
void BiTree<T>::PostOrder(BiNode<T>*bt)
{
if(bt==nullptr)return;
else
{
PostOrder(bt->lchild);
PostOrder(bt->rchild);
cout<<bt->data<<"\t";
}
}
template<typename T>
void BiTree<T>::LevelOrder()
{
BiNode<T>*Q[100],*q=nullptr;
int front=-1,rear=-1;
if(root==nullptr)return;
Q[++rear]=root;
while (front!=rear)
{
q=Q[++front];
cout<<q->data<<"\t";
if(q->lchild!=nullptr) Q[++rear]=q->lchild;
if(q->rchild!=nullptr) Q[++rear]=q->rchild;
}
}
int main()
{
BiTree<char> T;
cout<<"二叉树的前序遍历序列为:"<<endl;
T.PreOrder();
cout<<"\n二叉树的中序遍历序列为:"<<endl;
T.InOrder();
cout<<"\n二叉树的后序遍历序列为:"<<endl;
T.PostOrder();
cout<<"\n二叉树的层序遍历序列为:"<<endl;
T.LevelOrder();
return 0;
}
C++ 数据结构——二叉树
最新推荐文章于 2022-08-30 12:56:20 发布