#include <iostream>
#include <fstream>
#include <string.h>
#include<stdio.h>
using namespace std;
struct TreeNode
{
struct TreeNode* left;
struct TreeNode* right;
char elem;
};
TreeNode* BinaryTreeFromOrderings(char* inorder, char* aftorder, int length)
{
if(length == 0)
{
return NULL;
}
TreeNode* node = new TreeNode;//Noice that [new] should be written out.
node->elem = *(aftorder+length-1);
int rootIndex = 0;
for(;rootIndex < length; rootIndex++)//a variation of the loop
{
if(inorder[rootIndex] == *(aftorder+length-1))
break;
}
node->left = BinaryTreeFromOrderings(inorder, aftorder , rootIndex);
node->right = BinaryTreeFromOrderings(inorder + rootIndex + 1, aftorder + rootIndex , length - (rootIndex + 1));
return node;
}
void pre(TreeNode *root)
{
if(root)
{
printf("%c",root->elem);
pre(root->left);
pre(root->right);
}
}
void last(TreeNode * root)
{
if(root)
{
last(root->left);
last(root->right);
printf("%c",root->elem);
}
}
void cenci(TreeNode *root)
{
TreeNode *p[51];
p[0]=root;
int f= 0,r=1;
while( f < r)
{
if(p[f])
{
printf("%c",p[f]->elem);
p[r++]=p[f]->left;
p[r++]=p[f]->right;
}
f++;
}
}
int main()
{
char af[1100];
char in[1100];
int n;
scanf("%d%*c",&n);
while(n--)
{
gets(in);
gets(af);
int length =strlen(in);
TreeNode *root;
root = BinaryTreeFromOrderings(in, af, length);
pre(root);
printf("\n");
}
return 0;
}
已知中序后序求前序
最新推荐文章于 2021-12-04 20:13:27 发布