根据先序遍历和中序遍历建树
根据后序遍历和中序遍历建树
打印先序遍历
打印中序遍历
打印后序遍历
代码:
#include<bits/stdc++.h>
using namespace std;
typedef struct treeNode{
int data;
treeNode *left;
treeNode *right;
};
treeNode* createTreeFromQO(int *preder,int *order,int n)
{
treeNode* T;
if(n<=0)
{
return NULL;
}
T=(treeNode*)malloc(sizeof(treeNode));
int mid;
for(int i=0;i<n;i++)
{
if(preder[0]==order[i])
{
mid=i;
break;
}
}
T->data=preder[0];
T->left=createTreeFromQO(preder+1,order,mid);
T->right=createTreeFromQO(preder+mid+1,order+mid+1,n-mid-1);
return T;
}
treeNode* createTreeFromPO(int *postder,int *order,int n)
{
treeNode* T;
if(n<=0){
return NULL;
}
T=(treeNode*)malloc(sizeof(treeNode));
int mid;
for(int i=0;i<n;i++){
if(order[i]==postder[n-1]){
mid=i;
break;
}
}
T->data=postder[n-1];
T->left=createTreeFromPO(postder,order,mid);
T->right=createTreeFromPO(postder+mid,order+mid+1,n-mid-1);
return T;
}
void prePrint(treeNode* T)
{
if(T!=NULL){
cout<<T->data<<" ";
prePrint(T->left);
prePrint(T->right);
}
}
void orderPrint(treeNode* T)
{
if(T!=NULL)
{
orderPrint(T->left);
cout<<T->data<<" ";
orderPrint(T->right);
}
}
void postPrint(treeNode* T)
{
if(T!=NULL)
{
postPrint(T->left);
postPrint(T->right);
cout<<T->data<<" ";
}
}
int main()
{
int n;
cin>>n;
int preder[n],order[n];
for(int i=0;i<n;i++)
{
cin>>preder[i];
}
for(int i=0;i<n;i++){
cin>>order[i];
}
treeNode* t=createTreeFromQO(preder,order,n);
prePrint(t);
cout<<endl;
orderPrint(t);
cout<<endl;
postPrint(t);
return 0;
}