#include<bits/stdc++.h>
using namespace std;
class node{
public:
int data;
node *left;
node *right;
node(int data){
this->data=data;
left=NULL;
right=NULL;
}
};
int bsearch(int in[],int start,int end,int key) {
while(start <end){
int mid = start = (end - start) / 2;
if (in[mid] == key)
return mid;
else if (in[mid] > key)
return bsearch(in, start, mid - 1, key);
else
return bsearch(in, mid + 1, end, key);
}
}
node *createnextnode(int *in,int *pre,int s,int e){
static int i=0;
if(s>=e)
return 0;
int index=-1;
int key=pre[i];
index=bsearch(in,s,e,pre[i]);
node *root=new node(pre[i]);
i++;
root->left=createnextnode(in,pre,s,index-1);
root->right=createnextnode(in,pre,index+1,e);
return root;
}
void bfs(node *root){
queue<node *>q;
q.push(root);
q.push(NULL);
while(!q.empty()){
node *f=q.front();
if(f==NULL) {
cout << endl;
q.pop();
if(!q.empty())
q.push(NULL);
}
else {
cout << f->data << “,”;
q.pop();
}
if(f->left)
q.push(f->left);
if(f->right)
q.push((f->right));
}
}
int main(){
int in[]={3,2,8,4,1,6,7,5};
int pre[]={3,2,8,4,1,6,7,5};
int n=sizeof(in)/sizeof(in[0]);
node *root=createnextnode(in,pre,0,n-1);
//bfs(root);
return 0;
}