Informe de resolución de problemas de Leetcode Serie de árbol binario más grande

La serie de árboles binarios más grande de Leetcode

654. El árbol binario más grande

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

  • La raíz del árbol binario es el elemento más grande de la matriz.
  • El subárbol izquierdo es el árbol binario más grande construido a partir de la parte izquierda del valor máximo en la matriz.
  • El subárbol derecho es el árbol binario más grande construido a partir de la parte derecha del valor máximo en la matriz.
  • Construya el árbol binario más grande de la matriz dada y genere el nodo raíz de este árbol.
输入:[3,2,1,6,0,5]
输出:返回下面这棵树的根节点:

      6
    /   \
   3     5
    \    / 
     2  0   
       \
        1

responder:

La idea es muy simple, primero encuentre el valor máximo, luego coloque el subárbol izquierdo a la izquierda y el subárbol derecho a la derecha. En cuanto a por qué quiero escribir un blog, porque siento que escribo iterativamente mejor que recursivamente, así que quiero probar la escritura recursiva

/**
 * 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* construct(vector<int>&nums,int l,int r){
    
    
        int maxnum=l;
        if(l>r)
            return nullptr;
        for(int i=l+1;i<=r;++i){
    
    
            if(nums[i]>nums[maxnum])
                maxnum=i;
        }
        TreeNode* temp=new TreeNode(nums[maxnum]);
        temp->left=construct(nums,l,maxnum-1);
        temp->right=construct(nums,maxnum+1,r);
        return temp;
    }
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
    
    
        TreeNode* ans=construct(nums,0,nums.size()-1);
        return ans;
    }
};

Abanico arbor 998.

Definición máxima de árbol: árbol en el que el valor de cada nodo es mayor que cualquier otro valor en su subárbol.

Proporcione la raíz del nodo raíz del árbol más grande.

Como en la pregunta anterior, el árbol dado se construye recursivamente a partir de la tabla A (raíz = Construct (A)) utilizando la siguiente rutina de Construct (A):

  • Si A está vacío, devuelve nulo
  • De lo contrario, sea A [i] el elemento más grande de A. Cree una raíz de nodo raíz con valor A [i]
  • El subárbol izquierdo de la raíz se construirá como Construct ([A [0], A [1],…, A [i-1]])
  • El subárbol derecho de la raíz se construirá como Construct ([A [i + 1], A [i + 2],…, A [A.length-1]])
  • Volver a la raíz

Tenga en cuenta que no proporcionamos directamente A, solo un nodo raíz root = Construct (A).

Suponga que B es una copia de A y se agrega el valor val. Asegúrese de que los valores en B sean diferentes.

Devolver Constructo (B).

responder:

Esta pregunta es una transformación de la pregunta anterior. Inserta un valor al final para que puedas reconstruir este árbol. Creo que es un árbol de búsqueda aquí. Lo pensé durante mucho tiempo. Fácil de pisar

(Ps: El código recursivo es realmente simple ...)

/**
 * 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* insertIntoMaxTree(TreeNode* root, int val) {
    
    
        if(val>=root->val){
    
    
            root=new TreeNode(val,root,nullptr);
        }
        else {
    
    
            if(root->right==nullptr)
                root->right=new TreeNode(val);
            else
                root->right=insertIntoMaxTree(root->right,val);
        }
        return root;
    }
};

Supongo que te gusta

Origin blog.csdn.net/qq_43477024/article/details/111939576
Recomendado
Clasificación