已知一棵二叉树的前序序列和中序序列分别存于两个一维数组中,试编写算法建立该二叉树的二叉链表。 |
分两行分别输入一棵二叉树的前序序列和中序序列。 |
输出该二叉树的后序序列。 |
ABDFGCEH BFDGACEH |
FGDBHECA |
#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 ;
}
}
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;
}