感谢头发哥的模板~~
天津大学2013年程序设计题T2:
二叉树T的先序遍历结果为:DBACEGF,中序遍历结果为:ABCDEFG
1)求其后序遍历结果
2)编写程序,读入先序遍历与中序遍历序列的结果存入字符数组,并求出后序遍历的结果
已知先序中序,后序很好求啦,第一问的答案是:ACBFGED
第二问,我只会纯暴力解,根据先序序列和中序序列构造出二叉树,然后后序遍历打印二叉树输出即可~
代码如下:
#include<iostream>
using namespace std;
typedef struct BTNode{
char data;
struct BTNode *lchild,*rchild;
}BTNode,*BiTree;
//后序递归打印二叉树
void post_print(BiTree T)
{
if(T!=NULL)
{
post_print(T->lchild);
post_print(T->rchild);
cout<<T->data;
}
}
//已知先序序列,后序序列构造二叉树
BiTree func(char pre[],char mid[],int l1,int r1,int l2,int r2)
{
BiTree root=(BiTree)malloc(sizeof(BTNode));
root->data=pre[l1];
int i=l2;
for(;pre[l1]!=mid[i];i++);
if(i>l2)
root->lchild=func(pre,mid,l1+1,l1+i-l2,l2,i-1);
else
root->lchild=NULL;
if(i<r2)
root->rchild=func(pre,mid,l1+i-l2+1,r1,i+1,r2);
else
root->rchild=NULL;
return root;
}
int main()
{
int n;
cin>>n;
char pre[n],mid[n];
for(int i=0;i<n;i++)
cin>>pre[i];
for(int i=0;i<n;i++)
cin>>mid[i];
int l1=0,l2=0,r1=n-1,r2=n-1;
BiTree T=func(pre,mid,l1,r1,l2,r2);
post_print(T);
}
输入:
7
DBACEGF
ABCDEFG
输出:
ACBFGED