#include<iostream>
using namespace std;
typedef class tree
{
public :
int date;
tree *left;
tree *right;
}*BTree,btree;
typedef class qnode
{
public :
BTree p;
qnode *next;
}*Qnode,qnode;
typedef class Queue
{
public :
Qnode fronts;
Qnode rear;
}*Squeue,squeue;
void creat_tree(BTree &L,char *str);
void init_queue(Squeue &L);
void input_queue(Squeue &L,BTree tree);
BTree pop_queue(Squeue &L);
bool empty_queue(Squeue &L);
void cengxu_printlist(BTree tree);
void printlist(BTree L);
int main()
{
char str[20]="ABCDEFG";
BTree L;
creat_tree(L,str);
cengxu_printlist(L);
//printlist(L);
return 0;
}
void creat_tree(BTree &L,char *str)
{
L=new btree;
L=NULL;
int i=0;
BTree pnew;
Qnode pcur,tail,newlist,head;
while(str[i]!='\0')
{
pnew=new btree;
pnew->date=str[i];
pnew->left=NULL;
pnew->right=NULL;
if(L==NULL)//树的根节点为空
{
L=pnew;
newlist=new qnode;
newlist->p=pnew;
newlist->next=NULL;
head=newlist;
tail=newlist;
pcur=newlist;
i++;
continue;
}
else
{
newlist=new qnode;
newlist->p=pnew;
newlist->next=NULL;
tail->next=newlist;
tail=newlist;
}
if(pcur->p->left==NULL)
{
pcur->p->left=pnew;
}
else if(pcur->p->right==NULL)
{
pcur->p->right=pnew;
pcur=pcur->next;
}
i++;
}
}
void init_queue(Squeue &L)
{
L=new squeue;
L->fronts=NULL;
L->rear=NULL;
}
void input_queue(Squeue &L,BTree trees)
{
Qnode s=new qnode;
s->p=trees;
s->next=NULL;
if(L->rear==NULL)
{
L->fronts=L->rear=s;
}
else
{
s->next=L->rear->next;
L->rear->next=s;
L->rear=s;
}
}
bool empty_queue(Squeue &L)
{
if(L->fronts==NULL)
{
return true;
}
else
{
return false;
}
}
BTree pop_queue(Squeue &L)
{
if (!empty_queue(L))
{
if(L->fronts==L->rear)//只有一个元素
{
BTree t=L->fronts->p;
L->fronts=L->rear=NULL;
return t;
}
else
{
Qnode q=L->fronts;
L->fronts=q->next;
return q->p;
}
}
}
void cengxu_printlist(BTree treed)
{
Squeue L;
init_queue(L);
Squeue q=L;//链队
BTree trees=treed;
input_queue(L,trees); //入队
BTree temp;
while(!empty_queue(L))
{
temp=pop_queue(L);
cout<<char(temp->date)<<" ";
if(temp->left!=NULL)
{
input_queue(L,temp->left);
}
if(temp->right!=NULL)
{
input_queue(L,temp->right);
}
}
cout<<endl;
}
void printlist(BTree L)
{
if(L!=NULL)
{
cout<<char(L->date)<<" ";
printlist(L->left);
printlist(L->right);
}
}
树的层序遍历,以及层序建树
最新推荐文章于 2022-05-12 20:40:19 发布