#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct TreeNode
{
struct TreeNode* left;
struct TreeNode* right;
char elem;
};
void TreeAft(char inorder[], char preorder[], int length)
{
if(length == 0)
{
return;
}
TreeNode* node = new TreeNode;
node->elem = *preorder;
int rootIndex = 0;
while(rootIndex < length)
{
if(inorder[rootIndex] == *preorder)
{
break;
}
rootIndex++;
}
TreeAft(inorder, preorder +1, rootIndex);
TreeAft(inorder + rootIndex + 1, preorder + rootIndex + 1, length - (rootIndex + 1));
cout<<node->elem<<" ";
}
void TreePre(char inorder[], char aftorder[], int length)
{
if(length == 0)
{
return ;
}
TreeNode* node = new TreeNode;
node->elem = *(aftorder+length-1);
cout<<node->elem<<" ";
int rootIndex = 0;
while(rootIndex < length)
{
if(inorder[rootIndex] == *(aftorder+length-1))
break;
rootIndex++;
}
TreePre(inorder, aftorder , rootIndex);
TreePre(inorder + rootIndex + 1, aftorder + rootIndex , length - (rootIndex + 1));
}
int main(int argc, char* argv[])
{
char pr[]="ABCDEFGH";
char in[]="BDCEAFHG";
char aft[]="DECBHGFA";
cout<<"求后序遍历:"<<endl;
TreeAft(in, pr, 8);
cout<<endl<<"求前序遍历:"<<endl;
TreePre(in, aft, 8);
printf("\n");
return 0;
}