#include <iostream>
#include <fstream>
#include <string>
#include <bits/stdc++.h>
#include <fstream>
#include <string>
#include <bits/stdc++.h>
struct TreeNode {
struct TreeNode* left;
struct TreeNode* right;
char elem;
} T;
struct TreeNode* left;
struct TreeNode* right;
char elem;
} T;
TreeNode *BinaryTreeFromOrderings(char* inorder, char* preorder, int length) { //中序先序求后序
if(length <= 0) {
return NULL;
}
TreeNode* node = new TreeNode;
node->elem = *preorder;
int rootIndex = 0;
for(; rootIndex < length; rootIndex++) {
if(inorder[rootIndex] == *preorder)
break;
}
if(length <= 0) {
return NULL;
}
TreeNode* node = new TreeNode;
node->elem = *preorder;
int rootIndex = 0;
for(; rootIndex < length; rootIndex++) {
if(inorder[rootIndex] == *preorder)
break;
}
node->left = BinaryTreeFromOrderings(inorder, preorder +1, rootIndex);
node->right = BinaryTreeFromOrderings(inorder + rootIndex + 1, preorder + rootIndex + 1, length - (rootIndex + 1));
node->right = BinaryTreeFromOrderings(inorder + rootIndex + 1, preorder + rootIndex + 1, length - (rootIndex + 1));
return node;
}
}
TreeNode *BinaryTreeFromOrdering(char* inorder, char* hou, int length) { //中序后序求先序
if(length <= 0) {
return NULL;
}
TreeNode* node = new TreeNode;
node->elem = *(hou+length-1);
int rootIndex = 0;
for(; rootIndex < length; rootIndex++) {
if(inorder[rootIndex] == *(hou+length-1))
break;
}
if(length <= 0) {
return NULL;
}
TreeNode* node = new TreeNode;
node->elem = *(hou+length-1);
int rootIndex = 0;
for(; rootIndex < length; rootIndex++) {
if(inorder[rootIndex] == *(hou+length-1))
break;
}
node->left = BinaryTreeFromOrdering(inorder, hou, rootIndex);
node->right = BinaryTreeFromOrdering(inorder + rootIndex + 1, hou + rootIndex, length - rootIndex - 1);
node->right = BinaryTreeFromOrdering(inorder + rootIndex + 1, hou + rootIndex, length - rootIndex - 1);
return node;
}
}
void houtree(TreeNode *t) {
if(t == NULL)
return ;
if(t == NULL)
return ;
houtree(t->left);
houtree(t->right);
printf("%c\n",t->elem);
}
void prtree(TreeNode *t) {
if(t == NULL)
return ;
houtree(t->right);
printf("%c\n",t->elem);
}
void prtree(TreeNode *t) {
if(t == NULL)
return ;
printf("%c\n",t->elem);
prtree(t->left);
prtree(t->right);
prtree(t->left);
prtree(t->right);
}
int main() {
int main() {
char pr[100]; //="GDAFEMHZ";
char in[100]; //="ADEFGHMZ";
char hou[100]; //="AEFDHZMG";
TreeNode *tree;
int sw,len;
char in[100]; //="ADEFGHMZ";
char hou[100]; //="AEFDHZMG";
TreeNode *tree;
int sw,len;
printf("先序中序求后序 输入1\n后序中序求先序 输入2\n");
scanf("%d",&sw);
switch(sw) {
case 1:
printf("请输入二叉树的先序:");
scanf("%s",&pr);
len = strlen(pr);
printf("请输入二叉树的中序:");
scanf("%s",&in);
tree = BinaryTreeFromOrderings(in, pr, len);
printf("后序遍历为\n");
houtree(tree);
break;
case 2:
printf("请输入二叉树的后序:");
scanf("%s",&hou);
len = strlen(hou);
printf("请输入二叉树的中序:");
scanf("%s",&in);
tree = BinaryTreeFromOrdering(in, hou, len);
printf("先序遍历为\n");
prtree(tree);
break;
}
scanf("%d",&sw);
switch(sw) {
case 1:
printf("请输入二叉树的先序:");
scanf("%s",&pr);
len = strlen(pr);
printf("请输入二叉树的中序:");
scanf("%s",&in);
tree = BinaryTreeFromOrderings(in, pr, len);
printf("后序遍历为\n");
houtree(tree);
break;
case 2:
printf("请输入二叉树的后序:");
scanf("%s",&hou);
len = strlen(hou);
printf("请输入二叉树的中序:");
scanf("%s",&in);
tree = BinaryTreeFromOrdering(in, hou, len);
printf("先序遍历为\n");
prtree(tree);
break;
}
return 0;
}