두 갈래 나무의 뒷차례와 중간차례를 정해 주십시오. 층차례가 흐르는 순서를 출력해 주십시오.여기서 키 값이 서로 같지 않은 정수라고 가정합니다.

1321 단어 트리 베이스
두 갈래 나무의 뒷차례와 중간차례를 정해 주십시오. 층차례가 흐르는 순서를 출력해 주십시오.여기서 키 값이 서로 같지 않은 정수라고 가정합니다.
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define maxn 335
int n ;
int lod[maxn];
int mod[maxn];
int cnt = 0;

struct node
{
    int l;
    int r;
    int v;
    node (): l(0) , r(0) {}
};
node data[maxn];

int dfs(int la[],int mo[], int len)
{

    if( len <= 0 )return -1;
    int k = 0;
    for(int i = 0 ; i < len ; ++i) {
        if( la[len-1] == mo[i] ){
            k = i;
            break;
        }
    }
    int rt = cnt++;
    data[rt].v = mo[k];
    data[rt].l = dfs(la,mo,k);
    data[rt].r = dfs(la+k,mo+k+1,len-k-1);
    return rt;
}

int main()
{
    cin >> n;
    for(int i = 0 ; i < n ; ++i)
        scanf("%d",&lod[i]);
    for(int i = 0 ; i < n ; ++i)
        scanf("%d",&mod[i]);
    int rt = dfs(lod,mod,n);

    queueq;
    q.push(rt);
	bool first = 1;
	while (!q.empty())
	{
		int fr = q.front(); q.pop();
		if (data[fr].l != -1) q.push(data[fr].l);
		if (data[fr].r != -1) q.push(data[fr].r);
		if (first) { first = 0; }
		else printf(" ");
		printf("%d", data[fr].v);
	}
	printf("
"); }

좋은 웹페이지 즐겨찾기