蓝桥-ALGO-20-求先序排列

来源:互联网 发布:网络聊5毛钱是什么意思 编辑:程序博客网 时间:2024/06/05 01:51

ACM模版

描述

描述

题解

不管是要输出先序还是后序,只要给定中序和另外一种遍历,就可以求出来。

根据各个序列之间的关系,很容易就能建树,然后再遍历一遍即可。

代码

#include <iostream>#include <string>using namespace std;typedef struct BTNode{    char data;    struct BTNode *lc, *rc;} *BTree;BTree root;string m, l;void BuildBTree(BTree &t, int ms, int me, int ls, int le){    t = new BTNode;    t->data = l[le];    t->lc = t->rc = NULL;    int pos = ms;    while (m[pos] != l[le])    {        pos++;    }    int len = pos - ms;    if (pos > ms)    {        BuildBTree(t->lc, ms, pos - 1, ls, ls + len - 1);    }    if (pos < me)    {        BuildBTree(t->rc, pos + 1, me, ls + len, le - 1);    }}void PrintBTree(BTree p){    if (p != NULL)    {        cout << p->data;        PrintBTree(p->lc);        PrintBTree(p->rc);    }}int main(int argc, char* argv[]){    cin >> m;    cin >> l;    BuildBTree(root, 0, int(m.size() - 1), 0, int(l.size() - 1));    PrintBTree(root);    putchar(10);    return 0;}
原创粉丝点击