二叉树的还原(先中 + 后中)

来源:互联网 发布:java接口文档模板 编辑:程序博客网 时间:2024/06/05 23:57
#include <iostream>#include <sstream>#include <cstring>#include <cstdio>#include <cctype>#include <cmath>#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <vector>#include <algorithm>#define inf 0x3f3f3f3f#define PI 3.14159265358979323#define SCD(a) scanf("%d",&a)#define SCDD(a,b) scanf("%d%d",&a,&b)#define SCF(a) scanf("%lf",&a)#define PTD(a) printf("%d\n",a)#define PTS(a) printf("%s\n",a)#define MST(a) memset(a, 0, sizeof(a))using namespace std;//                      PTA 还原二叉树const int L = 10001;int n, m;struct BiTNode{    char data;    BiTNode *lchild, *rchild;};BiTNode *T;BiTNode* pre_in(const char* pre,const char* in, int n){    int i;    if(n==0)        return NULL;    BiTNode* head = new BiTNode;    head->data = pre[0];    for(i=0;i<n;i++){        if(pre[0] == in[i])            break;    }    BiTNode* lchild = pre_in(pre+1,in,i);    BiTNode* rchild = pre_in(pre+i+1,in+i+1,n-i-1);    head->lchild = lchild;    head->rchild = rchild;    return head;}BiTNode* post_in(const char* post,const char* in, int n){    if(n==0)        return NULL;    BiTNode* head = new BiTNode;    head->data = post[n-1];    int i;    for(i=0;i<n;++i){        if( post[n-1] == in[i])            break;    }    BiTNode* lchild  = post_in(post,in,i);    BiTNode* rchild = post_in(post+i,in+i+1,n-i-1);    head->lchild = lchild;    head->rchild = rchild;    return head;}int Depth(BiTNode* &T){    if(T==NULL)        return 0;    else        return max(Depth(T->lchild),Depth(T->rchild)) + 1;}int main(){    int i ,j ,a ,b ,t;    SCD(n);    char pre[L],in[L],pos[L];    /*              //二选一    for(i=0;i<n;i++)        cin>>pre[i];    for(i=0;i<n;i++)        cin>>pos[i];    */    for(i=0;i<n;i++)        cin>>in[i];    /*              //对应二选一    T = post_in(pos,in,n);    T = pre_in(pre,in,n);    */    cout<<Depth(T)<<endl;    return 0;}/*先中:9ABDFGHIECFDHGIBEAC5后中:9FHIGDEBCAFDHGIBEAC5*/

阅读全文
1 0
原创粉丝点击