//还原二叉树
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct TreeNode
{
char data;
struct TreeNode* left;
struct TreeNode* right;
};
//中序,前序——>后序
void ToAft(char* inorder, char* preorder, int length)
{
if(length == 0)
{
return;
}
TreeNode* root = new TreeNode;
root->data = *preorder;
int rootIndex = 0;
for(;rootIndex<length; rootIndex++)
{
if(inorder[rootIndex] == *preorder)
break;
}
ToAft(inorder, preorder +1, rootIndex);
ToAft(inorder + rootIndex + 1, preorder + rootIndex + 1, length - (rootIndex + 1));
cout<<root->data;
return;
}
//中序,后序——>前序
TreeNode* ToPre(char* inorder, char* aftorder, int length)
{
if(length == 0)
{
return NULL;
}
TreeNode* root = new TreeNode;
root->data = *(aftorder+length-1);
cout<<root->data;
int rootIndex = 0;
for(;rootIndex < length; rootIndex++)
{
if(inorder[rootIndex] == *(aftorder+length-1))
break;
}
root->left = ToPre(inorder, aftorder , rootIndex);
root->right = ToPre(inorder + rootIndex + 1, aftorder + rootIndex , length - (rootIndex + 1));
return root;
}
int main(int argc, char* argv[])
{
//后序dhebfijgca
char* pr="abdehcfgij";
char* in="dbehafcigj";
ToAft(in, pr,10);
printf("\n");
char* af="dhebfijgca";
char* in2="dbehafcigj";
ToPre(in2, af, 10);
printf("\n");
return 0;
}
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct TreeNode
{
char data;
struct TreeNode* left;
struct TreeNode* right;
};
//中序,前序——>后序
void ToAft(char* inorder, char* preorder, int length)
{
if(length == 0)
{
return;
}
TreeNode* root = new TreeNode;
root->data = *preorder;
int rootIndex = 0;
for(;rootIndex<length; rootIndex++)
{
if(inorder[rootIndex] == *preorder)
break;
}
ToAft(inorder, preorder +1, rootIndex);
ToAft(inorder + rootIndex + 1, preorder + rootIndex + 1, length - (rootIndex + 1));
cout<<root->data;
return;
}
//中序,后序——>前序
TreeNode* ToPre(char* inorder, char* aftorder, int length)
{
if(length == 0)
{
return NULL;
}
TreeNode* root = new TreeNode;
root->data = *(aftorder+length-1);
cout<<root->data;
int rootIndex = 0;
for(;rootIndex < length; rootIndex++)
{
if(inorder[rootIndex] == *(aftorder+length-1))
break;
}
root->left = ToPre(inorder, aftorder , rootIndex);
root->right = ToPre(inorder + rootIndex + 1, aftorder + rootIndex , length - (rootIndex + 1));
return root;
}
int main(int argc, char* argv[])
{
//后序dhebfijgca
char* pr="abdehcfgij";
char* in="dbehafcigj";
ToAft(in, pr,10);
printf("\n");
char* af="dhebfijgca";
char* in2="dbehafcigj";
ToPre(in2, af, 10);
printf("\n");
return 0;
}
1500

被折叠的 条评论
为什么被折叠?



