已知先序,中序,求后序

来源:互联网 发布:淘宝无忧退货 编辑:程序博客网 时间:2024/05/01 03:22
#include <iostream>using namespace std;void func(int* pre, int* mid, int pre_left, int pre_right,                int mid_left, int mid_right){    if(pre_left == pre_right)    {        cout<<pre[pre_left]<<" ";        return ;    }    int left_i=pre_left, mid_i=mid_left;    while(mid_i<=mid_right)    {        if(pre[pre_left] == mid[mid_i])        {            func(pre, mid, pre_left+1, left_i, mid_left, mid_i-1);            func(pre, mid, left_i+1, pre_right, mid_i+1, mid_right);            cout<<pre[pre_left]<<" ";            break;        }else{            mid_i++;            left_i++;        }    }}int main(void){    int pre[] = {8,5,2,6,13,10,15};    int mid[] = {2,5,6,8,10,13,15};    int n = sizeof(pre)/sizeof(pre[0]);    func(pre, mid, 0, n-1, 0, n-1);    return 0;}

写的有点复杂,下面的简单点儿:

/*pre-order: {1,2,4,7,3,5,6,8}in-order:  {4,7,2,1,5,3,8,6}*/TNode* rebuild_BTree(int* pre_order, int *in_order, int len){if(pre_order==NULL || in_order==NULL || len==0)return NULL;TNode* h = new TNode;h->m_nValue = *pre_order;int* in_h = in_order;while(*in_h != *pre_order)in_h++;int l_len, r_len;l_len = in_h-in_order;h->m_pLeft = rebuild_BTree(pre_order+1, in_order, l_len);r_len = len-(in_h-in_order+1);h->m_pRigh = rebuild_BTree(pre_order+(len-r_len), in_h+1, r_len);return h;}