来源:http://www.cnblogs.com/wgqtmac/p/4404630.html
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct TreeNode {
int data;
int tLeft;
int tRight;
struct TreeNode *left;
struct TreeNode *right;
struct TreeNode *next;
} tNode, *pNode;
typedef struct TreeQuene {
pNode front;
pNode rear;
}tQuene, *pQuene;
pQuene CreateQuene();
void AddQ(pQuene q, pNode node);
pNode DeleteQ(pQuene q);
//void OrderTraver(int root, pNode tPointArray[]);
int IsEmptyQuene(pQuene q);
int main()
{
int lines, i;
int left, right;
char strleft, strright;
pNode tPointerArray[MAXSIZE];
pNode tPointer;
scanf("%d", &lines);
int flag[MAXSIZE] = {
0
};
for (i = 0; i < lines; i++) {
tPointer = (pNode)malloc(sizeof(tNode));
getchar();
scanf("%c %c", &strleft, &strright);
if (strleft == '-') {
left = -1;
} else {
left = (int)(strleft - '0');
flag[left] = 1;
}
if (strright == '-') {
right = -1;
} else {
right = (int)(strright - '0');
flag[right] = 1;
}
tPointer->data = i;
tPointer->tLeft = left;
tPointer->tRight = right;
tPointer->left = NULL;
tPointer->right = NULL;
tPointerArray[i] = tPointer;
}
int rootIndex;
for (i = 0; i < lines; i++) {
if (flag[i] != 1) {
rootIndex = i;
}
}
//create Tree
for (i = 0; i < lines; i++) {
if (tPointerArray[i]->tLeft != -1) {
tPointerArray[i]->left = tPointerArray[(tPointerArray[i]->tLeft)];
} else {
tPointerArray[i]->left = NULL;
}
if (tPointerArray[i]->tRight != -1) {
tPointerArray[i]->right = tPointerArray[(tPointerArray[i]->tRight)];
} else {
tPointerArray[i]->right = NULL;
}
}
//root index
pNode root = tPointerArray[rootIndex];
//levelOrderTravelsal
pQuene quene = CreateQuene();
AddQ(quene, root);
int flagg = 1;
while (!IsEmptyQuene(quene)) {
pNode node = DeleteQ(quene);
if (!(node->left) && !(node->right)) {
if (flagg) {
printf("%d", node->data);
flagg = 0;
} else {
printf(" %d", node->data);
}
}
if (node->left) {
AddQ(quene, node->left);
}
if (node->right) {
AddQ(quene, node->right);
}
}
return 0;
}
pQuene CreateQuene()
{
pQuene q = (pQuene)malloc(sizeof(tQuene));
q->front = NULL;
q->rear = NULL;
return q;
}
void AddQ(pQuene q, pNode node)
{
if (!(q->rear)) {
q->rear = node;
} else {
q->rear->next = node;
q->rear = node;
}
if (!(q->front)) {
q->front = node;
}
}
pNode DeleteQ(pQuene q)
{
pNode temp = q->front;
if (temp) {
q->front = q->front->next;
return temp;
} else {
return NULL;
}
}
int IsEmptyQuene(pQuene q)
{
if (q->front == NULL) {
return 1;
} else {
return 0;
}
}