实现二叉树创建及遍历算法。
函数接口定义:
void CreateBiTree(BiTree &T);//根据输入的字符串,创建二叉树。
void PreOrder(BiTree T);//先序遍历二叉树
void InOrder(BiTree T);//中序遍历二叉树
void PostOrder(BiTree T);//后序遍历二叉树
void LevelOrder(BiTree T);//层次遍历二叉树
其中 T
表二叉树类型。
裁判测试程序样例:
#include<iostream>
using namespace std;
typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T);//根据输入的字符串,创建二叉树。
void PreOrder(BiTree T);//先序遍历二叉树
void InOrder(BiTree T);//中序遍历二叉树
void PostOrder(BiTree T);//后序遍历二叉树
void LevelOrder(BiTree T);//层次遍历二叉树
int main(){
BiTree T;
CreateBiTree(T);
cout<<"PreOrder:";
PreOrder(T);
cout<<endl<<"InOrder:";
InOrder(T);
cout<<endl<<"PostOrder:";
PostOrder(T);
cout<<endl<<"LevelOrder:";
LevelOrder(T);
return 0;
}
/* 请在这里填写答案 */
输入样例:
AB#C##D#EF###
输出样例:
输出拓扑序列。
PreOrder:ABCDEF
InOrder:BCADFE
PostOrder:CBFEDA
LevelOrder:ABDCEF
AC代码:
#include <queue>//引用队列的头文件
void CreateBiTree(BiTree &T)//根据输入的字符串,创建二叉树。
{
char e;
scanf("%c",&e);
if(e=='#')T=NULL;
else{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)exit(-2);
T->data=e;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return ;
}
void PreOrder(BiTree T)//先序遍历二叉树
{
if(T==NULL) return;
printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
void InOrder(BiTree T)//中序遍历二叉树
{
if(T==NULL) return;
InOrder(T->lchild);
printf("%c",T->data);
InOrder(T->rchild);
}
void PostOrder(BiTree T)//后序遍历二叉树
{
if(T==NULL) return;
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
}
void LevelOrder(BiTree T)//层次遍历二叉树
{
std::queue<struct BiNode*> que;//用C++中的queue创建一个队列
while (T) {
std::cout <<T->data;
if (T->lchild) {
que.push(T->lchild);
}
if (T->rchild) {
que.push(T->rchild);
}
if (que.empty()) {
return;
}
T = que.front();
que.pop();
}
}