#include <iostream>
using namespace std;
struct node
{
char data;
node *lc,*rc;
};
class BT
{
public:
BT()
{
root=creat();
}
~BT()
{
release(root);
}
void preorder()
{
preorder(root);
}
void inorder()
{
inorder(root);
}
void postorder()
{
postorder(root);
}
void levelorder();
private:
node *creat();
void release(node *bt);
void preorder(node *bt);
void inorder(node *bt);
void postorder(node *bt);
node *root;
};
void BT::preorder(node *bt)
{
if(bt==NULL)
return;
else
{
cout<<bt->data;
//cout<<bt->data<<" ";
preorder(bt->lc);
preorder(bt->rc);
}
}
void BT::inorder(node *bt)
{
if(bt==NULL)
return ;
else
{
inorder(bt->lc);
cout<<bt->data;
//cout<<bt->data<<" ";
inorder(bt->rc);
}
}
void BT::postorder(node *bt)
{
if(bt==NULL)
return ;
else
{
postorder(bt->lc);
postorder(bt->rc);
cout<<bt->data;
//cout<<bt->data<<" ";
}
}
void BT::levelorder()
{
node *Q[100],*q=NULL;
int front =-1;
int rear=-1;
if(root==NULL)
return ;
Q[++rear]=root;
while(front!=rear)
{
q=Q[++front];
//cout<<q->data<<" ";
cout<<q->data;
if(q->lc!=NULL)
Q[++rear]=q->lc;
if(q->rc!=NULL)
Q[++rear]=q->rc;
}
}
node* BT::creat()
{
node *bt;
char ch;
cin>>ch;
if(ch=='#')
bt=NULL;
else
{
bt=new node;
bt->data=ch;
bt->lc=creat();
bt->rc=creat();
}
return bt;
}
void BT::release(node *bt)
{
if(bt==NULL)
return ;
else
{
release(bt->lc);
release(bt->rc);
delete bt;
}
//cout<<"OVER!"<<endl;
}
int main()
{
char c='Y';
while(c=='Y')
{
BT t;
//cout<<"二叉树的前序遍历:"<<endl;
t.preorder();
cout<<endl;
//cout<<endl<<"二叉树的中序遍历:"<<endl;
t.inorder();
cout<<endl;
//cout<<endl<<"二叉树的后序遍历:"<<endl;
t.postorder();
cout<<endl;
//cout<<endl<<"二叉树的层序遍历:"<<endl;
//t.levelorder();
//cout<<endl;
cin>>c;
}
return 0;
}
【二叉树的遍历】
于 2022-05-14 23:32:45 首次发布