#include<iostream>
using namespace std;
typedef char DataType;
typedef struct BiTNode {
DataType data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
BiTree CreateBiTree() { //创建二叉树(先序创建)
BiTree T;
char ch;
cin >> ch;
if (ch == '#') T = NULL; //以‘#’表示该位置为空
else {
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T; //返回根节点
}
void PreOrderTraverse(BiTree T) //先序遍历二叉树
{
if (!T) return;
cout << T->data;
PreOrderTraverse(T->lchild); //递归遍历左子树
PreOrderTraverse(T->rchild); //递归遍历右子树
}
void InOrderTraverse(BiTree T) //中序遍历二叉树
{
if (!T) return;
InOrderTraverse(T->lchild);
cout << T->data;
InOrderTraverse(T->rchild);
}
void RearOrderTraverse(BiTree T) //后序遍历二叉树
{
if (!T) return;
RearOrderTraverse(T->lchild);
RearOrderTraverse(T->rchild);
cout << T->data;
}
void LinTraverse(BiTree T) { //层次遍历二叉树
BiTree temp[1000], p;
int rear = -1, front = -1;
temp[++rear] = T;
while (rear != front) {
front++;
p = temp[front];
printf("%c", p->data);
if (p->lchild != NULL) {
rear++;
temp[rear] = p->lchild;
}
if (p->rchild != NULL) {
rear++;
temp[rear] = p->rchild;
}
}
}
int main()
{
BiTree T;
cout << "请按照先序输入二叉树,空位置用“#”代替:";
T = CreateBiTree();
cout << "先序遍历:";
PreOrderTraverse(T);
cout << endl;
cout << "中序遍历:";
InOrderTraverse(T);
cout << endl;
cout << "后序遍历:";
RearOrderTraverse(T);
cout << endl;
cout << "层次遍历:";
LinTraverse(T);
cout << endl;
return 0;
}
树:
测试结果: