POJ2255----Tree Recovery

来源:互联网 发布:eminem光明会 知乎 编辑:程序博客网 时间:2024/05/20 06:07

题目见此链接

此题主要考察二叉树,根据给出先序遍历和中序遍历求后序遍历。
代码如下:

#include <iostream>#include <string>//#include <fstream>using namespace std;class Node{    public:        Node *left, *right;        char data;};//AEFDHZMG//build treevoid build(string preord, string inord, Node *root){    root->data = preord[0];    if(preord.length() == 1)    {        return ;    }     int rootLoc = inord.find(preord[0]);    int rightLoc = preord.find(inord[rootLoc+1]);    //cout << rightLoc << endl;    //建立左子树     if(rootLoc > 0)    {        root->left = new Node();        build(preord.substr(1, rootLoc), inord.substr(0, rootLoc), root->left);    }    //建立右子树     if(rightLoc > 0)    {        root->right = new Node();        build(preord.substr(rootLoc + 1), inord.substr(rootLoc+1), root->right);    }}//后序遍历二叉树void postorder(Node *root){    if(root->left)    {        postorder(root->left);    }    if(root->right)    {        postorder(root->right);    }    cout << root->data;}int main(){    //ifstream in("data2255.in");    string preord, inord, postord;    while (cin >> preord >> inord)    {        Node *root = new Node();        build(preord, inord, root);        postorder(root);        cout << endl;        delete root;    }    return 0;}
1 0
原创粉丝点击