#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#pragma warning(disable:6011)
#include <stdio.h>
#include <stdlib.h>
#define TElemType int
//初始化队头和队尾指针开始时都为0
int front = 0, rear = 0;//头,尾
typedef struct BiTNode
{
TElemType data;//数据域
struct BiTNode* lchild, * rchild;//左右孩子指针
}BiTNode, * BiTree;
//创建二叉树节点
void CreateBiTree(BiTree* T)
{
*T = (BiTNode*)malloc(sizeof(BiTNode));//根
(*T)->data = 1;
(*T)->lchild = (BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild = (BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->data = 2;//左
(*T)->lchild->lchild = (BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->rchild = (BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->rchild->data = 5;//左右
(*T)->lchild->rchild->lchild = NULL;
(*T)->lchild->rchild->rchild = NULL;
(*T)->rchild->data = 3;//右
(*T)->rchild->lchild = (BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->lchild->data = 6;//右左
(*T)->rchild->lchild->lchild = NULL;
(*T)->rchild->lchild->rchild = NULL;
(*T)->rchild->rchild = (BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->rchild->data = 7;//右右
(*T)->rchild->rchild->lchild = NULL;
(*T)->rchild->rchild->rchild = NULL;
(*T)->lchild->lchild->data = 4;//左左
(*T)->lchild->lchild->lchild = NULL;
(*T)->lchild->lchild->rchild = NULL;
/*
1
/ \
/ \
2 3
/ \ / \
/ \ / \
4 5 6 7
*/
}
//入队函数
void EnQueue(BiTree* a, BiTree node)
{
a[rear] = node;
rear++;
}
//出队函数
BiTNode* DeQueue(BiTNode** a)
{
return a[front++];
}
//输出函数
void displayNode(BiTree node) {
printf("%d ", node->data);
}
int main()
{
BiTree tree;
//初始化二叉树
CreateBiTree(&tree);
BiTNode* p;
//采用顺序队列,初始化创建队列数组
BiTree a[20];
//根结点入队
EnQueue(a, tree);
//当队头和队尾相等时,表示队列为空
while (front < rear)
{
//队头结点出队
p = DeQueue(a);
displayNode(p);
//将队头结点的左右孩子依次入队
if (p->lchild != NULL)
{
EnQueue(a, p->lchild);
}
if (p->rchild != NULL)
{
EnQueue(a, p->rchild);
}
}
return 0;
}
C语言二叉树层次遍历操作演示
最新推荐文章于 2024-07-05 15:40:53 发布