#include <iostream>
using namespace std;
struct BiNode
{
char data;
BiNode *lchild,*rchild;
};
class BiTree
{
public:
BiTree(){root = Creat();}
~BiTree(){Release(root);}
void PreOrder(){PreOrder(root);}
void InOrder(){InOrder(root);}
void PostOrder(){PostOrder(root);}
void LevelOrder();
private:
BiNode *root;
BiNode *Creat();
void Release(BiNode *bt);
void PreOrder(BiNode *bt);
void InOrder(BiNode *bt);
void PostOrder(BiNode *bt);
};
void BiTree::PreOrder(BiNode *bt)
{
if(bt==nullptr)return;
else{
cout<<bt->data<<"\t";
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
void BiTree::InOrder(BiNode *bt)
{
if(bt==nullptr)return;
else{
InOrder(bt->lchild);
cout<<bt->data<<"\t";
InOrder(bt->rchild);
}
}
void BiTree::PostOrder(BiNode *bt)
{
if(bt==nullptr)return;
else{
PostOrder(bt->lchild);
PostOrder(bt->rchild);
cout<<bt->data<<"\t";
}
}
void BiTree::LevelOrder()
{
BiNode *Q[100],*q=nullptr;
int front=-1,rear=-1;
if(root==nullptr)return;
Q[++rear] = root;//根节点压入队列
while(front!=rear)
{
q = Q[++front];//出队
cout<<q->lchild<<"\t";
if(q->lchild!=nullptr)Q[++rear]=q->lchild;
if(q->rchild!=nullptr)Q[++rear]=q->rchild;
}
}
BiNode *BiTree::Creat()
{
BiNode *bt;
char ch;
cin>>ch;
if(ch=="#")bt=nullptr;
else{
bt=new BiNode();
bt->data=ch;
//递归建立左子树右子树
bt->lchild = Creat();
bt->rchild = Creat();
}
return bt;
}
void BiTree::Release(BiNode *bt)
{
if(bt==nullptr)return;
else{
Release(bt->lchild);
Release(bt->rchild);
delete bt;
}
}
int main()
{
BiTree T=new BiTree();
cout<<"二叉树的前序遍历序列是:";
T.PreOrder();
cout<<"二叉树的中序遍历序列是:";
T.InOrder();
cout<<"二叉树的后序遍历序列是:";
T.PostOrder();
cout<<"二叉树的层序遍历序列是:";
T.LevelOrder();
}
c++中二叉树的实现!
最新推荐文章于 2024-07-25 08:38:10 发布