L2_011 두 갈래 나무 돌리기 (전순+중순->층순)

1308 단어
두 갈래 나무의 중차순과 전차순을 정해 주십시오. 먼저 나무를 거울로 반전시킨 다음에 반전된 층차순의 서열을 출력해 주십시오.거울 반전이란 모든 비엽결점의 좌우 아이를 맞바꾸는 것을 말한다.여기서 키 값이 서로 같지 않은 정수라고 가정합니다.
입력 형식: 첫 번째 줄을 입력하면 정수 N(<=30)을 주고 두 갈래 나무의 결점의 개수입니다.두 번째 줄은 그 중의 서열을 반복한다.세 번째 줄은 앞의 순서를 반복해서 보여 준다.숫자 사이는 공백으로 구분된다.출력 형식: 한 줄에서 이 트리가 반전된 후 겹쳐진 시퀀스를 출력합니다.숫자 사이는 1개의 공백으로 구분되며, 줄의 앞뒤에 여분의 공백이 있어서는 안 된다.
입력 샘플: 7 1 2 3 4 5 6 7 4 1 3 2 6 5 7 출력 샘플: 4 6 1 7 5 3 2
  • 앞의 006 방법과 마찬가지로 거울면은 사실 귀속할 때 먼저 오른쪽 나무로 귀속시키고 왼쪽 나무로 귀속시키면 된다
  • #include 
    #include 
    #define N 31
    using namespace std;
    int pre[N],mid[N];
    vector index(100000,-1);
    void level(int kp,int start,int endd,int ind)
    {
        if(start>endd) return;
        index[ind]=pre[kp];
        int i;
        for(i=start;i<=endd;++i){
            if(mid[i]==pre[kp])
                break;
        }
        int km=i;
        int rp=kp+km-start+1;
        int rstart=km+1;
        int rendd=endd;
        int lp=kp+1;
        int lstart=start;
        int lendd=km-1;
        level(rp,rstart,rendd,ind*2+1);
        level(lp,lstart,lendd,ind*2+2);
    }
    int main()
    {
        int n;cin>>n;
        for(int i=0;i>mid[i];
        }
        for(int i=0;i>pre[i];
        }
        level(0,0,n-1,0);
        int cnt=0;
        for(int i=0;i

    좋은 웹페이지 즐겨찾기