麻烦帮我回一个层序遍历

来源:百度知道 编辑:UC知道 时间:2024/06/29 03:05:56
#include"stdio.h"
#include"stdlib.h"

typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

void CreatBiTree(BiTree &T)
{//构造二叉树 T 的函数
int n;
BiTree t=(BiTree)malloc(sizeof(int));
scanf("%d",&n);
if(n==0) T=NULL;
else
{
t->data=n;
T=t;
CreatBiTree(t->lchild);
CreatBiTree(t->rchild);
}
}

void PreOrderTraverse(BiTree T)
{ //先序遍历二叉树 T 的函数
if(T)
{
printf("%d ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}

void InOrderTraverse(BiTree T)
{
//中序遍历二叉树 T 的函数
if(T)
{
InOrderTraverse(T->lchild);
printf("%d ",T->data);
InOrderTraverse(T->rchild);
}
}

void PostOrderTraverse(BiTree T)

void HierarchyBiTree(BiTree T) {
LinkQueue *Q; // 保存当前节点的左右孩子的队列
InitQueue(Q); // 初始化队列
if (T == NULL) return ERROR; //树为空则返回
p = T; // 临时保存树根T到指针p中
printf("%d ",p->data); // 访问根节点
if (p->lchild) EnQueue(Q, p->lchild); // 若存在左孩子,左孩子进队列
if (p->rchild) EnQueue(Q, p->rchild); // 若存在右孩子,右孩子进队列
while (!QueueEmpty(Q)) { // 若队列不空,则层序遍历
DeQueue(Q, p); // 出队列
printf("%d ",p->data); // 访问当前节点
if (p->lchild) EnQueue(Q, p->lchild); // 若存在左孩子,左孩子进队列
if (p->rchild) EnQueue(Q, p->rchild); // 若存在右孩子,右孩子进队列
}
DestroyQueue(Q); // 释放队列空间
}