解题代码
void InorderTraversal(BinTree BT) {
if (!BT) return;
InorderTraversal(BT->Left);
printf(" %c", BT->Data);
InorderTraversal(BT->Right);
}
void PreorderTraversal(BinTree BT) {
if (!BT) return;
printf(" %c", BT->Data);
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
void PostorderTraversal(BinTree BT) {
if (!BT) return;
PostorderTraversal(BT->Left);
PostorderTraversal(BT->Right);
printf(" %c", BT->Data);
}
typedef struct queue* pqueue;
struct queue {
BinTree data;
pqueue next;
};
pqueue newqueue(void) {
pqueue front = (pqueue)malloc(sizeof(struct queue));
front->next = NULL;
front->data = NULL;
return front;
}
pqueue inject(pqueue last, BinTree BT) {
pqueue new = (pqueue)malloc(sizeof(struct queue));
new->next = NULL;
new->data = BT;
last->next = new;
return new;
}
void pop(pqueue front) {
printf(" %c", front->next->data->Data);
pqueue temp = front->next;
front->next = temp->next;
free(temp);
}
void LevelorderTraversal(BinTree BT) {
pqueue front = newqueue();
pqueue last = front;
if (!BT) return;
last = inject(last, BT);
while (front->next) {
if (front->next->data->Left) last = inject(last, front->next->data->Left);
if (front->next->data->Right) last = inject(last, front->next->data->Right);
pop(front);
}
}
测试结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b53922a631179f6f081cffd19e5c6db7.png)
问题整理
1.类似代码复制的时候一定要注意修改,这道题的pre和inorder被我复制叉屁了,导致我最后都把create函数弄出来才发现的问题所在。