This question requires the realization of a given binary tree level traversal.
Function interface definition:
void Levelorder(BiTree T);`
T is the root pointer of the binary tree. The Levelorder function outputs the level traversal sequence of a given binary tree, in the format of a space followed by a character.
The BinTree structure is defined as follows:
typedef char ElemType;
typedef struct BiTNode
{ ElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
Sample referee test procedure:
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{ ElemType data; struct BiTNode *lchild, * rchild ; }BiTNode, BiTree; BiTree Create();/The details are not listed here / void Levelorder(BiTree T); int main() { BiTree T = Create(); printf("Levelorder:"); Levelorder(T); printf("\n"); return 0; } / Your code will be Embedded here*/
Sample output (for the tree given in the figure):
Levelorder: A B C D F G
code show as below:
void Levelorder(BiTree T)
{
BiTree q[1000];
int front=0,rear =0;
if(T)
{
q[rear++]=T;//根节点。
while(front!=rear)
{
BiTree now=q[front++];
printf(" %c",now->data);
if(now->lchild) q[rear++]=now->lchild;
//查找该层次左右子树是否遍历完成。
if(now->rchild) q[rear++]=now->rchild;
}
}
}
Complete code
测试数据
输入:AB#DF##G##C##
输出:ABDFGC
上面有图
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
BiTree Create();/* 细节在此不表 */
void Levelorder(BiTree T);
int main()
{
BiTree T = Create();
printf("Levelorder:"); Levelorder(T); printf("\n");
return 0;
}
BiTree Create()
{
char ch;
scanf("%c", &ch);
if (ch == '#')return NULL;
BiTree T = (BiTree)malloc(sizeof(struct BiTNode));//struct可不写。
T->data = ch;
T->lchild = Create();
T->rchild = Create();
return T;
}
void Levelorder(BiTree T)
{
BiTree q[10050];
int front = 0, rear = 0;
if (T)//树非空
{
q[rear++] = T;
while (rear != front)
{
BiTree now = q[front]; front++;
//数组中存放的是节点地址,用now接收,与链表相似
printf(" %c", now->data);
if (now->lchild)q[rear++] = now->lchild;//只能用now
if (now->rchild)q[rear++] = now->rchild;
//递归左右子树,将下层中节点放入数组
}
}
}