描述
已知二叉树的中序序列和前序序列存放在两个一维数组中,尝试建立二叉树的二叉链表。检查是否建立成功的方法是输出该二叉树的后序序列。
输入
分别输入二叉树的中序序列和前序序列
输出
输出二叉树的后序序列
输入样例
ABCDEGF
CBEGDFA
CBEGDFA
输出样例
C
G
E
F
D
B
G
E
F
D
B
A
#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
typedef struct TreeNode
{
struct TreeNode* lchild;
struct TreeNode* rchild;
char elem;
}TreeNode;
TreeNode* BinaryTree(char *preorder, char *inorder, int len)
{
if(len <= 0)
return NULL;
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->elem = preorder[0];
int rootindex = -1;
for(int i = 0; i < len; i ++)
{
if(inorder[i] == preorder[0])
{
rootindex = i;
break;
}
}
//cout << root->elem << endl;
root->lchild = BinaryTree(preorder+1,inorder, rootindex);
root->rchild = BinaryTree(preorder+rootindex+1,inorder+rootindex+1,len-rootindex-1);
return root;
}
void Traversal(TreeNode *root)
{
if(root != NULL)
{
Traversal(root->lchild);
Traversal(root->rchild);
cout << root->elem << endl;
}
}
int main()
{
char inorder[100];
char preorder[100];
cin >> preorder;
cin >> inorder;
int len = strlen(preorder);
TreeNode * root = BinaryTree(preorder, inorder, len);
Traversal(root);
return 0;
}