第十週 專案1
(1)層次遍歷演算法的驗證
#include <stdio.h>
#include "btree.h"
void LevelOrder(BTNode *b)
{
BTNode *p;
BTNode *qu[MaxSize]; //定義環形佇列,存放節點指標
int front,rear;
//定義隊頭和隊尾指標
front=rear=-1;
//置佇列為空佇列
rear++;
qu[rear]=b; //根節點指標進入佇列
while (front!=rear)
//佇列不為空
{
front=(front+1
p=qu[front]; //隊頭出佇列
printf("%c ",p->data); //訪問節點
if (p->lchild!=NULL) //有左孩子時將其進隊
{
rear=(rear+1)%MaxSize;
qu[rear]=p->lchild;
}
if (p->rchild!=NULL) //有右孩子時將其進隊
{
rear=(rear+1
qu[rear]=p->rchild;
}
}
}
int main()
{
BTNode *b;
CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
printf("二叉樹b: ");
DispBTNode(b);
printf("\n");
printf("層次遍歷序列:\n");
LevelOrder(b);
DestroyBTNode(b);
return 0;
}
(2)二叉樹構造演算法的驗證
#include <stdio.h>
#include <malloc.h>
#include "btree.h"BTNode *CreateBT1(char *pre,char *in,int n)
/*pre存放先序序列,in存放中序序列,n為二叉樹結點個數,本演算法執行後返回構造的二叉鏈的根結點指標*/
{
BTNode *s;
char *p;
int k;
if (n<=0)
return NULL;
s=(BTNode *)malloc(sizeof(BTNode));
//建立二叉樹結點*s
s->data=*pre;
for (p=in; p<in+n; p++)
//在中序序列中找等於*ppos的位置k
if (*p==*pre)
//pre指向根結點
break;
//在in中找到後退出迴圈
k=p-in;
//確定根結點在in中的位置
s->lchild=CreateBT1(pre+1,in,k);
//遞迴構造左子樹
s->rchild=CreateBT1(pre+k+1,p+1,n-k-1);
//遞迴構造右子樹
return s;
}
int main()
{
ElemType pre[]="ABDGCEF",in[]="DGBAECF";
BTNode *b1;
b1=CreateBT1(pre,in,7);
printf("b1:");
DispBTNode(b1);
printf("\n");
return 0;
}