非常经典的一道二叉树题目
运用递归建立二叉树
1.前序序列中pre[0]为二叉树的根节点
2.中序序列中root所在位置的两侧分别为左子树和右子树
3.运用递归建立以结构体为节点的二叉树,指针域包含左孩子和右孩子
题目链接:http://poj.org/problem?id=2255
#include<iostream>
#include<string>
using namespace std;
struct node
{
char data;
node *lchild;
node *rchild;
};
node* create(string pre, string in)
{
node *root;
root = NULL;
if(pre.length() > 0)
{
root = new node;
root->data = pre[0];
int index = in.find(root->data);
root->lchild = create(pre.substr(1, index), in.substr(0, index));
root->rchild = create(pre.substr(index + 1), in.substr(index + 1));
}
return root;
}
void postorder(node *&root)
{
if(root != NULL)
{
postorder(root->lchild);
postorder(root->rchild);
cout << root->data;
}
}
int main()
{
string pre, in;
while(cin >> pre >> in)
{
node* root;
root = create(pre, in);
postorder(root);
cout << endl;
}
return 0;
}