在二叉树的基础上,层次遍历时采用队列读取
核心代码
void levorder(BitTNode* t)
{
BiTree Queue[100],p; //创建队列
int front=0, rear = 0; //头尾相等
if (t)
{
Queue[rear++] = t; //根节点入队
while (front != rear) {
p = Queue[front++];//根节点出队
printf("%d ",p->data);
if(p->lchild!=NULL){
Queue[rear++] = p->lchild;//左孩子入队
}//if lchild
if (p->rchild != NULL) {
Queue[rear++] = p->rchild;//右孩子入队
}//if rchild
}//if (t)
}
完整代码
#include<stdio.h>
#include<stdlib.h>
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning (disable:4996)
#define MAX 100
typedef char DataType;
typedef struct node {
DataType data;
struct node* lchild, * rchild;
}BitTNode, * BiTree;
BitTNode* creat()
{
int n;
BitTNode* root;
scanf("%d", &n);
getchar();
if (n == 0) {
return NULL;
}
else {
root = (BitTNode*)malloc(sizeof(BitTNode));
root->data = n;
root->lchild = creat();
root->rchild = creat();
}
return root;
}
//层次遍历二叉树
void levorder(BitTNode* t)
{
BiTree Queue[100],p;
int front=0, rear = 0;
if (t)
{
Queue[rear++] = t;
while (front != rear) {
p = Queue[front++];
printf("%d ",p->data);
if(p->lchild!=NULL){
Queue[rear++] = p->lchild;
}
if (p->rchild != NULL) {
Queue[rear++] = p->rchild;
}
}
}
}
int main() {
BitTNode* root;
root = creat();
levorder(root);
}