L2-011 두 갈래 나무 돌리기(25분)
두 갈래 나무의 중차순과 전차순을 정해 주십시오. 먼저 나무를 거울로 반전시킨 다음에 반전된 층차순의 서열을 출력해 주십시오.거울 반전이란 모든 비엽결점의 좌우 아이를 맞바꾸는 것을 말한다.여기서 키 값이 서로 같지 않은 정수라고 가정합니다.
형식 입력:
첫 번째 줄을 입력하면 정수
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
&: 처음에 자신이 나무를 두 번 재건했는데 한 번은 제목의 뜻에 따라 한 번 후순을 뛰었다. 그리고 두 개의 서열을 뒤집었다. 그리고 또 한 번 나무를 만들었고 마지막에 한 번 층층이 훑어보았다.
&: 그래서 제목이 층층이 넘칠 때 오른쪽 아이를 먼저 훑어보았으면 좋겠어요.
#include
using namespace std;
struct node
{
int data;
struct node *lc, *rc;
};
int a[100],b[100];
int n;
struct node *creat(int len, int a[], int b[])
{
if(len == 0) return NULL;
int i;
struct node *root;
root = new node;
root -> data = a[0];
for(i = 0; i < len; i ++)
{
if(a[0] == b[i])
{
break;
}
}
root -> lc = creat(i, a + 1, b);
root -> rc = creat(len - i - 1,a + i + 1, b + i + 1);
return root;
};
void level(struct node *root)
{
queueq;
q.push(root);
bool f = true;
while(!q.empty())
{
struct node *x = q.front();
if(f)
{
printf("%d", x -> data);
f = false;
}
else printf(" %d",x -> data);
q.pop();
if(x -> rc) q.push(x -> rc);
if(x -> lc) q.push(x -> lc);
}
printf("
");
return ;
}
int main()
{
while(~scanf("%d",&n))
{
for(int i = 0; i < n; i ++) scanf("%d", &b[i]);
for(int i = 0; i < n; i ++) scanf("%d", &a[i]);
struct node *root;
root = creat(n,a,b);
level(root);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무가 완전한 두 갈래 나무인지 아닌지를 판단하는 실례완전 두 갈래 나무 특징 완전 두 갈래 나무는 마지막 층을 제외한 모든 층의 결점수가 가득 찬 것을 가리킨다.마지막 층도 가득 차면 두 갈래 나무이자 완전 두 갈래 나무다.마지막 층이 불만족스러우면 부족한 결점도 모...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.