- 相關(guān)推薦
用二叉樹實(shí)現(xiàn)先序、中序、后序、層次遍歷的算法
用先序遍歷建立一個(gè)二叉樹,實(shí)現(xiàn)先序遍歷、中序遍歷、后序遍歷,且用隊(duì)列實(shí)現(xiàn)層次遍歷: #include
using namespace std;
#define N 10
typedef struct node{
char data;
struct node*lchild,*rchild;
}*BiTree,BTNode;
typedef struct{
BiTree data[N];
int front,rear;
}SqQueue;
BiTree CrtBt()
{ char ch;
BiTree bt;
ch=getchar();
if(ch=='_') return NULL;
bt=new BTNode;
bt->data=ch;
bt->lchild=CrtBt();
bt->rchild=CrtBt();
return bt;
}
void preorder(BiTree bt)
{ if(bt==NULL) return;
putchar(bt->data);
preorder(bt->lchild);
preorder(bt->rchild);
}
void midorder(BiTree bt)
{ if(bt==NULL) return;
midorder(bt->lchild);
putchar(bt->data);
midorder(bt->rchild);
}
void lassorder(BiTree bt)
{ if(bt==NULL) return;
lassorder(bt->lchild);
lassorder(bt->rchild);
putchar(bt->data);
}
void DelTree(BTNode *bt)
{ if(bt==NULL) return;
DelTree(bt->lchild);
DelTree(bt->rchild);
delete(bt);
}
void init_Queue(SqQueue &Q)
{ Q.front=-1;
Q.rear=-1;
}
int enterQueue(SqQueue &Q,BiTree bt) {
if((Q.rear+1)%N==Q.front) return 0;
Q.rear=(Q.rear+1)%N;
Q.data[Q.rear]=bt;
return 1;
}
int empty(SqQueue &Q)
{ if(Q.front==Q.rear) return 1;
else
return 0;
}
BiTree delQueue(SqQueue &Q)
{ BiTree p;
Q.front=(Q.front+1)%N;
p=Q.data[Q.front];
return p;
}
void layertravel(BiTree bt)
{ BiTree p;
SqQueue Q;
init_Queue(Q);
if(bt==NULL) return;
enterQueue(Q,bt);
while(!emp用二叉樹實(shí)現(xiàn)先序、中序、后序、層次遍歷的算法ty(Q))
{ p=delQueue(Q);
putchar(p->data);
if(p->lchild) enterQueue(Q,p->lchild); if(p->rchild) enterQueue(Q,p->rchild); }
}
int main()
{ BiTree bt;
cout
bt=CrtBt();
cout
preorder(bt);
cout
cout
cout
cout
運(yùn)行結(jié)果:
【用二叉樹實(shí)現(xiàn)先序、中序、后序、層次遍歷的算法】相關(guān)文章:
序04-27
序04-28
霓裳中序第一賞析11-20
實(shí)Hilbert空間H中的一個(gè)新半序-φ半序04-29
層序的成因及層序地層格架05-02
鶯啼序 用夢(mèng)窗韻原文02-28
《序卦》卦序中的陰陽(yáng)平衡互補(bǔ)與變通配四時(shí)思想04-30
《鶯啼序》原文12-19
鶯啼序原文02-28
鶯啼序的原文03-01