層序遍歷樹的節點,佇列實現

changbaishannefu發表於2020-11-01

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct node{//樹節點定義
int data;
 struct node *lchild,*rchild;
}treenode;

typedef struct{
treenode que[100];
int front,rear;
}myque;//佇列用來裝樹的節點函式

void init(myque &m){//初始化佇列函式
m.front=m.rear=0;
}
void enterqu(myque &m,treenode n){//入隊
m.que[m.rear]=n;
m.rear=(m.rear+1)%100;
}
void dequ(myque &m){//出隊
m.front=(m.front+1)%100;
}
treenode get(myque m){//得到佇列首元素
return m.que[m.front];
}
void f(myque m,treenode root){//層序遍歷樹的函式
treenode p;
enterqu(m,root);
while(m.front!=m.rear){

    p=get(m);
    dequ(m);
    cout<<p.data<<" ";
    if(p.lchild!=NULL) enterqu(m,*p.lchild);
    if(p.rchild!=NULL) enterqu(m,*p.rchild);
}

}


int main()
{
    myque m;
     treenode *root,*a,*b,*c;

    root=new treenode;
    root->lchild=NULL;
    root->rchild=NULL;
    a=new treenode;
     a->lchild=NULL;
    a->rchild=NULL;
   b=new treenode;
    b->lchild=NULL;
    b->rchild=NULL;
    c=new treenode;
     c->lchild=NULL;
    c->rchild=NULL;
    root->data=1;
    a->data=2;
    b->data=3;
    c->data=4;
    root->lchild=a;
    root->rchild=b;
    a->lchild=c;

    init(m);
    f(m,*root);


    return 0;
}

相關文章