内容
(1)通过先序遍历序列ABD#G###CE#F##构造二叉链表方式存储的二叉树 (为了简化运算,data类型可以是字符型);
(2) 遍历二叉树,输出先序遍历的序列;
(3) 遍历二叉树,输出中序遍历的序列;
(4) 根据输出的先序、中序序列,画出二叉树的结构;
完整代码
#include <iostream>
#include <stack>
using namespace std;
#define datatype char
#define MAX 126
typedef struct bitnode
{
datatype data;
struct bitnode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree Initiate()
{
BiTNode *bt;
bt=NULL;
return bt;
}
BiTree createBiTree()
{
BiTree T;
char ch;
cin>>ch;
if(ch =='#')
T= NULL;
else{
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = createBiTree();
T->rchild = createBiTree();
}
return T;
}
void Preorder(BiTree bt)
{
BiTNode* stack[MAX],*p;
int top=-1;
if(bt==NULL)return;
p=bt;
while(!(top==-1&&p==NULL))
{
while(p!=NULL)
{
cout<<p->data<<" ";
top++;
stack[top]=p;
p=p->lchild;
}
if(top!=-1)
{
p=stack[top];
top--;
p=p->rchild;
}
}
}
void Inorder(BiTree bt)
{
if(bt==NULL)
{
cout<<" ";
return;
}
Inorder(bt->lchild);
cout<<bt->data;
Inorder(bt->rchild);
}
int main()
{
//ABD#G###CE##F##
BiTree t;
t=Initiate();
cout<<"请输入:";
t=createBiTree();
cout<<"先序遍历:";
Preorder(t);
cout<<"中序遍历:";
Inorder(t);
return 0;
}
结果实现