POJ2255----Tree Recovery

题目见此链接

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

#include <iostream>
#include <string>
//#include <fstream>
using namespace std;

class Node{
    public:
        Node *left, *right;
        char data;
};



//AEFDHZMG
//build tree
void 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;
}

  

转载于:https://www.cnblogs.com/topk/p/6580123.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值