gplt L2 - 011. 이 진 트 리 돌리 기 (이 진 트 리 옮 겨 다 니 기)
1922 단어 기타 oj데이터 구조 - 각종 트 리
제목: 당신 에 게 중 서 앞 서 를 주 고 층 서 를 구 합 니 다.
사고: 중간 순서 에 따라 나 무 를 만 들 고 hdu 1710 과 같 습 니 다.이어서 층 차 를 옮 겨 다 니 면 bfs 입 니 다.미 러 가 되 지 않 고 옮 겨 다 니 며 오른쪽 노드 를 먼저 대기 열 에 올 리 면 됩 니 다.
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int N = 35;
int cnt, n;
typedef struct Tree
{
Tree *left;
Tree *right;
int val;
}Tree;
Tree *root;
Tree* creat(int *preorder, int *inorder, int n)// 、
{
Tree *tmp;
for(int i = 0; i < n; i++)
{
if(preorder[0]==inorder[i])//
{
tmp = (Tree*)malloc(sizeof(Tree));
tmp->val = inorder[i];
tmp->left = creat(preorder+1, inorder, i);
tmp->right = creat(preorder+i+1, inorder+i+1, n-(i+1));
return tmp;
}
}
return NULL;
}
void levelorder(Tree *cur)
{
cnt = 0;
queueque;
while(!que.empty()) que.pop();
que.push(cur);
Tree *node;
while(!que.empty())
{
node = que.front();
que.pop();
if(cnt == n-1) printf("%d
", node->val);
else
{
printf("%d ", node->val);
cnt++;
}
if(node->right != NULL) que.push(node->right);
if(node->left != NULL) que.push(node->left);
}
}
int main()
{
// freopen("in.txt", "r", stdin);
int preorder[N], inorder[N];
while(~scanf("%d", &n))
{
for(int i = 0; i < n; i++)
scanf("%d", &inorder[i]);
for(int i = 0; i < n; i++)
scanf("%d", &preorder[i]);
root = creat(preorder, inorder, n);
levelorder(root);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[네트워크 흐름 24 문제] 마술 공 문제.n 개의 기둥 이 있다 고 가정 하면 다음 과 같은 규칙 에 따라 이 n 개의 기둥 에 번호 가 1, 2, 3 인 공 을 순서대로 넣 어야 한다. (1) 매번 어떤 기둥 의 맨 위 에 만 공 을 놓 을 수 있다. (...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.