算法
void LevelOrderTraverse(SqBiTree T)
{
if (T)
{
SqQueue Q;
SqBiTree T;
createTree(T);
int i = 1;
EnQueue(Q, T, i);
while (i <= MAX_TREE_SIZE)
{
TElemType node = DeQueue(Q);
Display(node);
if (T[2 * i])
EnQueue(Q, T, 2 * i);
if (T[2 * i + 1])
EnQueue(Q, T, 2 * i + 1);
i++;
}
}
}
完整代码
#include <stdio.h>
#define MAX_TREE_SIZE 7
#define TElemType int
#define MAX_QUEUE_SIZE 100
#define QElemType int
int front = 0, rear = 0;
typedef TElemType SqBiTree[MAX_TREE_SIZE];
typedef QElemType SqQueue[MAX_QUEUE_SIZE];
void EnQueue(SqQueue Q, SqBiTree T, int i)
{
Q[rear++] = T[i - 1];
}
TElemType DeQueue(SqQueue Q)
{
TElemType e = Q[front++];
return e;
}
void createTree(SqBiTree T)
{
for (int i = 0; i < MAX_TREE_SIZE; i++)
{
T[i] = i + 1;
}
}
void Display(TElemType node)
{
printf("%d ", node);
}
void LevelOrderTraverse(SqBiTree T)
{
if (T)
{
SqQueue Q;
SqBiTree T;
createTree(T);
int i = 1;
EnQueue(Q, T, i);
while (i <= MAX_TREE_SIZE)
{
TElemType node = DeQueue(Q);
Display(node);
if (T[2 * i])
EnQueue(Q, T, 2 * i);
if (T[2 * i + 1])
EnQueue(Q, T, 2 * i + 1);
i++;
}
}
}
int main(void)
{
SqBiTree T;
LevelOrderTraverse(T);
return 0;
}