C語言按層次遍歷二叉樹算法
#define MaxSize 1000
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node lchild;
struct node rchild;
} BTNode;
//創建二叉樹
void CreateBTNode(BTNode &b,char str)
{
BTNode St[MaxSize],p=NULL;
int top=-1,k,j=0;
char ch;
b=NULL;
ch=str[j];
while(ch!='\0')
{
switch(ch)
{
case '(':top++;St[top]=p;k=1;break;
case ')':top--;break;
case ',':k=2;break;
default:p=(BTNode )malloc(sizeof(BTNode));
p->data=ch;p->lchild=p->rchild=NULL;
if(b==NULL) b=p;
else
{
switch(k)
{
case 1:St[top]->lchild=p;break;
case 2:St[top]->rchild=p;break;
}
}
}
j++;
ch=str[j];
}
}
//層次遍歷算法
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)%MaxSize;
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)%MaxSize;
qu[rear]=p->rchild;
}
}
}
//主函數
int main()
{
BTNode b,h;
char s[MaxSize] = "A(B(D(,G)),C(E,F))";
CreateBTNode(b,s);
printf("層次遍歷算法的訪問次序為:");
LevelOrder(b);
printf("\n請輸入二叉樹括號表示法字符串:\n");
return 0;
}
</pre>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!