//遍历二叉树
#include <iostream>
using namespace std;
//二叉树的二叉链表结构,就是二叉树的存储结构,1个数据域,2个指针域(指向左右孩子)
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode,*BiTree;
//二叉树的建立,按照前序遍历的方式建立二叉树
void CreateBiTree(BiTree *T)//输入形式如AB##C##,A是根节点,BC是左右子树
{
char ch;
cin >> ch;
if (ch=='#')
{
*T = NULL;//保证是叶节点
}
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = ch;//生成节点
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);//构造左右子树
}
}
//将树节点前序遍历输出
void operation1(char ch)
{
cout << ch << " ";
}
//输出层数
void operation2(char ch, int level)
{
cout << "在第" << level << "层" << endl;
}
//递归方式先序遍历二叉树
void PreOrderTraverse(BiTree T, int level)
{
if (T==NULL)
{
return;
}
operation1(T->data);
operation2(T->data, level);
PreOrderTraverse(T->lchild, level + 1);
PreOrderTraverse(T->rchild, level + 1);
}
//中序遍历
void InOrderTraverse(BiTree T, int level)
{
if (T==NULL)
{
return;
}
InOrderTraverse(T->lchild, level + 1);
operation1(T->data);
operation2(T->data, level);
InOrderTraverse(T->rchild, level + 1);
}
//后序遍历
void PostOrderTraverse(BiTree T, int level)
{
if (T==NULL)
{
return;
}
PostOrderTraverse(T->lchild, level + 1);
PostOrderTraverse(T->rchild, level + 1);
operation1(T->data);
operation2(T->data, level);
}
int main()
{
int level = 1;
BiTree T = NULL;
cout << "以先序遍历的方式建立二叉树:";
CreateBiTree(&T);
cout << "递归先序遍历输出为:" << endl;
PreOrderTraverse(T, level);
cout << endl;
cout << "递归中序遍历输出为:" << endl;
InOrderTraverse(T, level);
cout << endl;
cout << "递归后序遍历输出为:" << endl;
PostOrderTraverse(T, level);
cout << endl;
return 0;
}