gplt L2 - 011. 이 진 트 리 돌리 기 (이 진 트 리 옮 겨 다 니 기)

https://www.patest.cn/contests/gplt/L2-011
제목: 당신 에 게 중 서 앞 서 를 주 고 층 서 를 구 합 니 다.
사고: 중간 순서 에 따라 나 무 를 만 들 고 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); } }

좋은 웹페이지 즐겨찾기