【树】根据前序序列和中序序列写出二叉树

来源:互联网 发布:apache rewrite https 编辑:程序博客网 时间:2024/05/17 13:05

首先感谢小建建学长的帮助,

用数组实现微笑


前序序列char pre[100]="dacebhfgi";

中序序列char mid[100]="dcbehagif";


/*根据前序序列和中序序列写出二叉树序列*/#include<iostream>#include<cstring>#include<stdio.h>using namespace std;const int maxn=1000;char pre[100]="dacebhfgi";char mid[100]="dcbehagif";char tree[maxn*4];/*    i,j分别是前序序列的头节点和尾节点,    a, b分别是中序序列子区间的头尾节点,*/void buildTree(int i,int j,int a,int b,int m)//m是节点的位置{    if(b<a||j<i) return;    if(b==a) {tree[m]=mid[b];return ;}//最后一个值一定是mid[b]!    int ii,tag;    char root=pre[i];    for(ii=a;ii<=b;ii++)        if(mid[ii]==root)           {tag=ii;tree[m]=root;break;}///ii和i千万别混了        buildTree(i+1,i+tag-a,a,tag-1,m*2+1);    buildTree(i+tag-a+1,j,tag+1,b,m*2+2);///注意pre在右边的搜索范围!会缩短成后半部分!}/* a bcd efg    中左右 cbd a feg    左中右!注意他们的范围 */int main(){    int n=strlen(pre);    memset (tree,' ',sizeof(tree));    buildTree(0,n-1,0,n-1,0);       for(int i=0;i<100;i++)        cout<<i<<"   " <<tree[i]<<endl;    return 0;}


0 0