#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 50
typedef struct Node
{
char data;
struct Node *LChild;
struct Node *RChild;
}BiTNode,*BiTree;
typedef struct
{
BiTree element[MAXSIZE];
int front;
int rear;
}SeqQueue;
/*初始化队列*/
void InitQueue(SeqQueue *Q)
{
Q->front = Q->rear = 0;
}
/*入队*/
int EnterQueue(SeqQueue *Q, BiTree bt)
{
if ((Q->rear + 1) % MAXSIZE == Q->front)
{
return 0;
}
else
{
Q->element[Q->rear] = bt;
Q->rear = (Q->rear + 1) % MAXSIZE;
return 1;
}
}
/*出队*/
int DeleteQueue(SeqQueue *Q, BiTree *bt)
{
if (Q->front == Q->rear)
{
return 0;
}
else
{
*bt = Q->element[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return 1;
}
}
/*判断队列是否为空*/
int IsEmpty(SeqQueue *Q)
{
if (Q->front == Q->rear)
{
return 1;
}
else
{
return 0;
}
}
/*扩展线序遍历创建二叉链表*/
void CreateBiTree(BiTree *bt)
{
char ch;
ch = getchar();
if (ch == '\n')
{
return;
}
if (ch == '.')
{
*bt = NULL;
}
else
{
*bt = (BiTree)malloc(sizeof(BiTNode));
(*bt)->data = ch;
CreateBiTree(&((*bt)->LChild));
CreateBiTree(&((*bt)->RChild));
}
}
/*先序遍历输出二叉树的结点*/
void PreOrder(BiTree root)
{
if (root != NULL)
{
printf("%c ",root->data);
PreOrder(root->LChild);
PreOrder(root->RChild);
}
}
/*中序遍历输出二叉树的结点*/
void InOrder(BiTree root)
{
if (root != NULL)
{
InOrder(root->LChild);
printf("%c ", root->data);
InOrder(root->RChild);
}
}
/*中序非递归遍历输出二叉树的结点*/
void InOrderNo(BiTree root)
{
int top = 0;
BiTree p = root;
BiTree s[MAXSIZE] = { NULL };
do{
while (p != NULL)
{
if (top > MAXSIZE)
{
return;
}
else
{
top++;
s[top] = p;
p = p->LChild;
}
}
if (top != 0)
{
p = s[top];
top--;
printf("%c ", p->data);
p = p->RChild;
}
} while (p != NULL || top != 0);
}
/*后序遍历输出二叉树的结点*/
void PostOrder(BiTree root)
{
if (root != NULL)
{
PostOrder(root->LChild);
P
二叉树 的先序 中序、后序遍历、层次遍历以及树状打印等操作
最新推荐文章于 2023-11-02 00:32:57 发布