二叉树的存储结构
#include <iostream>
//二叉树的链式存储
typedef struct BiTNode {
int data;//数据域
struct BiTNode* lchild, * rchild;//左、右孩子指针,根据实际要求决定加不加父指针
}BiTNode, * BiTree;
//链式队列结点
typedef struct LinkNode {
BiTNode* data;//存放的是指针
struct LinkNode* next;
}LinkNode;
typedef struct {
LinkNode* front, * rear;//队头队尾指针
}LinkQueue;
二叉树的遍历
//先序遍历
void PreOrder(BiTree T)
{
if (T != NULL) {
visit(T);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
//中序遍历
void InOrder(BiTree T)
{
if (T != NULL) {
InOrder(T->lchild);
visit(T);
InOrder(T->rchild);
}
}
//后序遍历
void PostOrder(BiTree T)
{
if (T != NULL) {
PostOrder(T->lchild);
PostOrder(T->rchild);
visit(T);
}
}
//层次遍历
void LevelOrder(BiTree T)
{
LinkQueue Q;//使用链队列,方便扩展
InitQueue(Q);//初始化辅助队列
BiTree p;
EnQueue(Q, T);//根结点入队
while (IsEmpty(Q)) {//队列不空则循环
DeQueue(Q, p);//访问出队结点
visit(p);
if (p->lchild != NULL)
EnQueue(p->lchild);//左孩子入队
if (p->rchild != NULL)
EnQueue(p->rchild);//右孩子入队
}
}