[LeetCode] C ++: árbol de problemas intermedio 654. El árbol binario más grande

654. El árbol binario más grande

Dificultad media 242

Dada una matriz de enteros sin elementos repetidos  nums . Un árbol binario máximo construido directamente de forma recursiva a partir de esta matriz se   define de la siguiente manera:

  1. La raíz del árbol binario es nums el elemento más grande de la matriz  .
  2. El subárbol izquierdo es  el árbol binario más grande construido de forma recursiva a partir de la parte izquierda del valor máximo de la matriz  .
  3. El subárbol de la derecha es  el árbol binario más grande construido de forma recursiva a partir de la parte derecha del valor máximo de la matriz  .

Devuelve nums el árbol binario más grande  construido  con la matriz dada  .

 

Ejemplo 1:

Entrada: nums = [3,2,1,6,0,5]
 Salida: [6,3,5, nulo, 2,0, nulo, nulo, 1]
 Explicación: La llamada recursiva es la siguiente: 
- [3 , El valor máximo en 2,1,6,0,5] es 6, la parte izquierda es [3,2,1] y la parte derecha es [0,5]. 
    -El valor máximo en [3,2,1] es 3, la parte izquierda es [] y la parte derecha es [2,1]. 
        -Arreglo vacío, sin nodos secundarios. 
        -El valor máximo en [2,1] es 2, la parte izquierda es [] y la parte derecha es [1]. 
            -Arreglo vacío, sin nodos secundarios. 
            -Sólo hay un elemento, por lo que el nodo hijo es un nodo con un valor de 1. 
    -El valor máximo en [0,5] es 5, la parte izquierda es [0] y la parte derecha es []. 
        -Sólo hay un elemento, por lo que el nodo hijo es un nodo con un valor de 0. 
        -Arreglo vacío, sin nodos secundarios.

Ejemplo 2:

Entrada: nums = [3,2,1]
 Salida: [3, nulo, 2, nulo, 1]

 

inmediato:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000
  • nums Todos los números enteros son  diferentes entre sí.

Recursividad

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        TreeNode* node = new TreeNode(0);
        if(nums.size() == 1){
            node->val = nums[0];
            return node;
        }
        int maxValue = 0;
        int maxValueIndex = 0;  //找最大值
        for(int i = 0; i < nums.size(); i++){
            if(nums[i] > maxValue){
                maxValue = nums[i];
                maxValueIndex = i;
            }
        }
        node->val = maxValue;
        if(maxValueIndex > 0){
            vector<int> newVec(nums.begin(), nums.begin() + maxValueIndex);
            node->left = constructMaximumBinaryTree(newVec);
        }
        if(maxValueIndex < (nums.size()-1)){
            vector<int> newVec(nums.begin() + maxValueIndex + 1, nums.end());
            node->right = constructMaximumBinaryTree(newVec);
        }
        return node;
    }
};

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44566432/article/details/113853865
Recomendado
Clasificación