[Árbol binario completo de clase A de PAT / árbol de ordenación binaria] 1064 Árbol de búsqueda binario completo (30 puntos)

El árbol de ordenación binaria tiene una propiedad:

  • La secuencia obtenida por el recorrido de orden medio es una secuencia ordenada

Así que ordene la secuencia dada por el título, y luego recorra un árbol ordenado binario completo con todos los valores de los nodos vacíos (no se ha establecido el árbol binario completo, pero la matriz existe, por lo que cada nodo es Exista), asigne el valor de cada nodo en el recorrido de orden medio de acuerdo con el orden de la secuencia ordenada, de modo que se construye un árbol binario completo.
El recorrido secuencial del árbol binario completo es el recorrido en orden del árbol binario completo.

# include <bits/stdc++.h>
using namespace std;

/* 二叉排序树有一个性质:中序遍历得到的序列是有序序列 
所以将题目给定的序列排好序,然后将一个所有结点值为空的完全二叉排序树进行中序遍历,
把遍历中每一个结点的值按照排序好的有序序列的顺序赋值,这样一颗完全二叉树就建立好了!
对完全二叉树数组进行顺序遍历就是对完全二叉树进行中序遍历
*/

int A[1010];
int CBT[1010];
int N;

int idx = 0;
void inOrder(int root){
    
     // 中序遍历给结点赋值
    if(root > N) return;
    inOrder(root*2); // 左子树
    CBT[root] = A[idx++]; // 给结点赋值
    inOrder(root*2 + 1); // 右子树
}

int main(){
    
    
    cin >> N;
    for(int i =0;i < N;++i)
        scanf("%d", &A[i]);
    sort(A, A+N);
    inOrder(1);
    for(int i = 1;i <= N;++i)
        cout << CBT[i] << (i == N?"\n":" ");
    
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/MYMarcoreus/article/details/113943323
Recomendado
Clasificación