Description
根据给定的字符串生成二叉树并前序、中序、后序此二叉树。
Input
给定一字符串,其中#表示空。
例:上图输入为
HDB#A##C##G#FE###
Output
分别输出此二叉树前序、中序和后序。
Sample Output
HDBACGFE(前序)
BADCHGEF(中序)
ABCDEFGH(后序)
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct BiTNode //定义结构体
{
char data; //数据
struct BiTNode *lchild,*rchild; //左右孩子
}BiTNode,*BiTree;
int CreateBiTree(BiTree &T)//建树
{
char data;
scanf("%c",&data);
if(data=='#') //遇到 # 的时候,就代表没有左孩子或者右孩子了
T=NULL;
else{
T=(BiTree)malloc(sizeof(BiTNode));//开配空间
T->data=data;//存入数据
CreateBiTree(T->lchild);//去遍历左孩子
CreateBiTree(T->rchild);
}
return 0;
}
void Visit(BiTree T)
{
if(T->data!='#')
printf("%c",T->data);
}
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);
}
}
int main()
{
BiTree T;
CreateBiTree(T);
Preorder(T);
cout<<endl;
Inorder(T);
cout<<endl;
Postorder(T);
}