如何用佇列層序遍歷二叉樹? 匿名使用者 1級 2012-06-07 回答

=0&&e;\;lch;%c\\:printf(",%c“

while(front;

front=(front+1)%m;

printf(",&k);etype e。h>n 5;

printf(”rch;

}

bitnode *creat_bt1()

{

bitnode *t;

printf(“

prtbtree(t;

if(p->

paintleaf(bt->

void preorder(bitnode *p);

if((bt->rch););n 7,%c"。交換二叉樹的左右子樹"!\);

printf(”\);

scanf(“

printf(”lch);;rch);rch==NULL)

printf(“stdlib;

void levorder(bitree);\\n請輸入二叉樹各節點的值;

levorder(t);

}

else printf(”%3c“n 1;二叉樹為空;

hr=treedepth(bt->n”lch==NULL&&bt->p->!\n“二叉樹為空;rch):if(t)

{printf(”n“

v[i]=p;n”%c",rear=0;

exchange(t),4。層次遍歷二叉樹“n”rch=NULL;);

printf(“

break;

scanf(”二叉樹為空:if(t)

{printf(“lch=NULL;break;\:%d”

#define m 100

typedef char etype;

exchange(bt->),bt->!=NULL)

{

if(bt->

printf(“先序遍歷二叉樹;n":t=creat_bt1(););lch);

void prtbtree(bitree;n”

}

}while(k>

printf(“\!=‘

t->

case 5;n”

case 3,j;

case 10;);

case 2;int k;

printf(",&e););

if(bt)

{p=bt->);

void exchange(bitree);

}

bitnode *creat_bt2()

{

bitnode *t;n 3;),5;

}

return(count);二叉樹為空;j<。後序遞迴遍歷二叉樹“\n 9,*rch;lch);

case 8;

void paintleaf(bitree):”),&e);\

if(T)

{

enqueue(T);

break;

printf(“hr);%3c”data=e;lch;\

case 0,7;););

break,2;n 8;

}

else printf(“

void inorder(bitnode *p);

typedef struct bitnode

{

etype data:"。計算二叉樹的高度”);

struct bitnode *lch。計算二叉樹中葉結點個數",p->lch);n 請繼續輸入二叉樹各結點的編號和對應的值;rch==NULL))

count++,max!\\二叉樹的高度為;rch=p;%d“

printf(”);

if(e==’

printf(“

prtbtree(t;

}

void preorder(bitnode *p){

if(p)

{

printf(”

return(max+1);

paintleaf(bt->\\

postorder(t);=1&&k<,int level)

{

int j;層次遍歷二叉樹;

}bitnode!=NULL)enqueue(p->lch=bt->);

leafcount(bt->rch);n“n 6;

}

else printf(”n 2;

printf(“\)! 按回車鍵:”#‘? hl;rch;rch=p;

break;stdio,*p;

printf(",p->n請輸入二叉樹各結點的編號和對應的值(如;);

scanf("!=NULL)

{

leafcount(bt->etype e;n再見;bt->

}

}

void inorder(bitnode *p)

{

if(p){

inorder(p->n\=6*level+1;

break;\二叉樹為空!=rear)

{

p=delqueue();

scanf(“):",hr。中序遞迴遍歷二叉樹”二叉樹為空;

int front=0;

}

}

void postorder(bitnode *p)

{

if(p)

{

postorder(p->

}

}

}

int treedepth(bitree bt)

{

int hl;n",6,*v[20];

printf(“n 10;

}

else printf(”

printf(“n"!\

}

else printf(”),leafcount(t));}

}

bitree delqueue()

{

if(front==rear)return NULL;

break;

if(i==1)t=p;

t=creat_bt2():%d\!\!=NULL)

{

hl=treedepth(bt->\);

do{

printf(“

ch=getchar();二叉樹為空;);

return(que[front]);;\,p->

for(j=0;

bitree que[m];\!\)。結束程式執行”lch);

}

}

int leafcount(bitree bt)

{

if(bt;lch;

}

void levorder(bitree T)

{

bitree p;data);%3c",9;

bitnode *t;

printf(“\:1,&i;

}

}

void enqueue(bitree T)

{

if(front;後序遍歷二叉樹;\

bitnode *creat_bt1();

case 9;exchange(bt->:exit(0),0);data););n 0;

inorder(t),&e);n”

printf(“\,int);

}

else

return(0):if(t)

{printf(”n“=10);bt->!=(rear+1)%m)

{rear=(rear+1)%m:if(t)

{printf(”

void enqueue(bitree);

max=(hl>:“;p->,10)"!\;

printf(”);

printf(“);n\

preorder(p->

else

{

t=(bitnode *)malloc(sizeof(bitnode));

printf(”

printf(“

}

}

void exchange(bitree bt)

{

bitree p;%3c”lch):“););n",bt->

printf("。先序遞迴遍歷二叉樹”rch=creat_bt2();

t->%d;

prtbtree(bt->

preorder(t);

printf(“n”\二叉樹的葉子結點數為;

}

return(t);

printf("。列印二叉樹“%d;

void postorder(bitnode *p);data);\逆時針旋轉90度輸出的二叉樹;data); ”

if(i%2==0) v[j]->;;lch==NULL)&&(bt->\#’n 請輸入您的選擇(0;

break;n 4;

printf(",返回…\)

{

p=(bitnode *)malloc(sizeof(bitnode));

case 4;

if(p->lch=creat_bt2();

}

else printf(“\,&i;););

bitnode *creat_bt2();

int leafcount(bitree);n”rch;data=e;2。建立二叉樹方法 1",1;fflush(stdin);

else

v[j]->

bitree delqueue();

if(bt){

prtbtree(bt->

int count=0;n",a););

void main()

{

char ch;data);

que[rear]=T;

}

void prtbtree(bitree bt;lch);

preorder(p->

postorder(p->二叉樹的葉結點數為;);

case 7;int i;n":\:hr:if(t)

{printf(“),level+1);)

t=NULL;n",3:\n”data););二叉樹為空;rch);\!=NULL)enqueue(p->%3c“j++)printf(”break;);

while(i;);

}

printf(“

p->);

}

void paintleaf(bitree bt)

{

if(bt;

printf(",p->中序遍歷二叉樹:if(t)

{printf("!\:if(t)

{printf(”);paintleaf(t);rch);n“lch);lch=p#include

}

return(t););

else

{j=i/n==========主選單==============",treedepth(t));

}

else printf(”):if(t)

{printf(“\。h>

printf(”)。建立二叉樹方法 2“;

break,8;

case 6,level+1);;rch),0):”

switch(k)

{case 1;):“n===============================”

int treedepth(bitree);

if(bt;

t->

printf(“);

inorder(p->n”

}

else printf(“;二叉樹的左右子樹;

#include<,*bitree