#include <iostream>
#include "fun.cpp"
using namespace std;
int pre[]={1,2,3};int in[]={2,1,3};
void foo1(int preIndexBegin,int preIndexEnd,int inIndexBegin,int inIndexEnd)
{
if(inIndexEnd<inIndexBegin) return ;
if(inIndexEnd ==inIndexBegin)
{
cout<<in[inIndexBegin];
return ;
}
else
{
int k;
for(int i=inIndexBegin;i<=inIndexEnd;i++)
if(in[i]==pre[preIndexBegin])
k=i;
int count;
count=k-inIndexBegin;
foo1(preIndexBegin+1,preIndexBegin+count,inIndexBegin,k-1);
foo1(preIndexBegin+count+1,preIndexEnd,k+1,inIndexEnd);
cout<< pre[preIndexBegin];
}
}
node * foo(int preIndexBegin,int preIndexEnd,int inIndexBegin,int inIndexEnd)
{
/*
递归思想:
inorder 数组用来确定 pre 数组的分段。主力还是pre 数组。根据inorder 数组情况将pre 分成左右子数组。
边界条件 是inorder 数组里只剩一个数了。此数为叶节点。
*/
if(inIndexEnd ==inIndexBegin)
{
node *p=(node *)malloc(sizeof(node));
p->data=in[inIndexBegin];
p->left=NULL;
p->right=NULL;
return p;
}
else
{
node *p=(node *)malloc(sizeof(node));
p->data=pre[preIndexBegin];
int k;
for(int i=inIndexBegin;i<inIndexEnd;i++)
if(in[i]==pre[preIndexBegin])
k=i;
int count;
count=k-inIndexBegin;
p->left=foo(preIndexBegin+1,preIndexBegin+count,inIndexBegin,k-1);
p->right=foo(preIndexBegin+count+1,preIndexEnd,k+1,inIndexEnd);
return p;
}
}
#include "fun.cpp"
using namespace std;
int pre[]={1,2,3};int in[]={2,1,3};
void foo1(int preIndexBegin,int preIndexEnd,int inIndexBegin,int inIndexEnd)
{
if(inIndexEnd<inIndexBegin) return ;
if(inIndexEnd ==inIndexBegin)
{
cout<<in[inIndexBegin];
return ;
}
else
{
int k;
for(int i=inIndexBegin;i<=inIndexEnd;i++)
if(in[i]==pre[preIndexBegin])
k=i;
int count;
count=k-inIndexBegin;
foo1(preIndexBegin+1,preIndexBegin+count,inIndexBegin,k-1);
foo1(preIndexBegin+count+1,preIndexEnd,k+1,inIndexEnd);
cout<< pre[preIndexBegin];
}
}
node * foo(int preIndexBegin,int preIndexEnd,int inIndexBegin,int inIndexEnd)
{
/*
递归思想:
inorder 数组用来确定 pre 数组的分段。主力还是pre 数组。根据inorder 数组情况将pre 分成左右子数组。
边界条件 是inorder 数组里只剩一个数了。此数为叶节点。
*/
if(inIndexEnd ==inIndexBegin)
{
node *p=(node *)malloc(sizeof(node));
p->data=in[inIndexBegin];
p->left=NULL;
p->right=NULL;
return p;
}
else
{
node *p=(node *)malloc(sizeof(node));
p->data=pre[preIndexBegin];
int k;
for(int i=inIndexBegin;i<inIndexEnd;i++)
if(in[i]==pre[preIndexBegin])
k=i;
int count;
count=k-inIndexBegin;
p->left=foo(preIndexBegin+1,preIndexBegin+count,inIndexBegin,k-1);
p->right=foo(preIndexBegin+count+1,preIndexEnd,k+1,inIndexEnd);
return p;
}
}