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());
}
};