Likou 654. El árbol binario más grande

tema:

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

La raíz del árbol binario es el elemento más grande en los números de matriz.
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.
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.

Ejemplo:

solución

El pedido anticipado que generalmente se usa para construir un árbol binario, porque el nodo raíz se construye primero

En términos generales: si se permite que el nodo vacío (puntero nulo) entre en recursividad, no se agrega si. Si no se permite que el nodo vacío entre en recursividad, se agrega una restricción de if y la condición de terminación se ajustará en consecuencia.

Código

class Solution {
    
    
public:

    TreeNode* traversal(vector<int>& nums, int left, int right) {
    
    
        if (left >= right) return nullptr;

        //分割,找到局部最大值
        int delimitIndex = left;
        for (int i = left + 1; i < right; i++) {
    
    
            if (nums[i] > nums[delimitIndex]) {
    
    
                delimitIndex = i;
            } 
        }
        //创建节点,
        TreeNode* node = new TreeNode(nums[delimitIndex]);
        //左右节点返回值递归
        node->left = traversal(nums, left, delimitIndex);
        node->right = traversal(nums, delimitIndex + 1, right);

        return node;
    }
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
    
    
        return traversal(nums, 0, nums.size());
    }
};

Supongo que te gusta

Origin blog.csdn.net/Matcha_/article/details/114063380
Recomendado
Clasificación