如何用佇列層序遍歷二叉樹?
=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