ラダーマッチ練習--7-6ツリー全検索再び(25ポイント)(順にプリアンブル+ - >注文後)

トピック:

ここに画像を挿入説明

分析:

タイトル分析から、ツリーの先行順走査は、スタックの配列で、スタックは、次にプリアンブルに従って、プリ、中間記憶プリアンブルと後順結果のアレイを使用して、それぞれ、ツリートラバーサルシーケンスの順序と帰りがけ順に続いて得られた結果を介して

コード:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <stack>
#include <vector>
using namespace std;

int n,ind,indx,ii;
int mid[35],pre[35];
string str;
vector<int> pos;

void PostOrder(int root,int st,int ed)  //root是对于前序数组pre ,st、ed是对于中序数组 mid
{
    if(st > ed) return;
    int index=st;
    while(st<ed&&pre[root]!=mid[index]) index++;
    PostOrder(root+1,st,index-1);
    PostOrder(root+1+index-st,index+1,ed);
    pos.push_back(pre[root]);
}

int main()
{
    int val;
    stack<int> s;
    scanf("%d",&n);
    int tmp = 2*n;
    while(tmp--)
    {
        cin >> str;
        if(str[1]=='u')
        {
            scanf("%d",&val);
            pre[indx++] = val;  //前序
            s.push(val);
        }
        if(str[1]=='o')
        {
            mid[ind++] = s.top();  //中序
            s.pop();
        }
    }
    PostOrder(0,0,n-1);
    for(unsigned i=0;i<pos.size();++i)
        if(i==pos.size()-1)
            printf("%d\n",pos[i]);
        else
            printf("%d ",pos[i]);
    return 0;
}
公開された61元の記事 ウォン称賛7 ビュー3621

おすすめ

転載: blog.csdn.net/weixin_42469716/article/details/105088835