1. Introducción al tema
Dada una matriz ordenada de números enteros con diferentes elementos y dispuestos en orden ascendente, escriba un algoritmo para crear un árbol de búsqueda binario con la altura más pequeña.
Ejemplo:
dada una matriz ordenada: [-10, -3,0,5,9],
Una posible respuesta es: [0, -3,9, -10, nulo, 5], que puede representar el siguiente árbol de búsqueda binaria altamente equilibrado:
0
/ \
-3 9
/ /
-10 5
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/minimum-height-tree-lcci
Copyright es propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Dos ideas para resolver problemas
Las características que cumple el árbol de altura mínima: la diferencia de altura entre los subárboles izquierdo y derecho de cualquier nodo no supera 1. De acuerdo con los requisitos del tema, use el método recursivo para encontrar continuamente la posición media en la secuencia dada y construya el nodo del árbol binario de búsqueda. Consulte el código para obtener más detalles.
Tres, código de resolución de problemas
class Solution {
public:
//最小高度树满足的条件:任意节点的左右子树的高度差不能超过1
TreeNode* sortedArrayToBST(vector<int>& nums) {
return dfs(nums, 0, nums.size()-1);
}
TreeNode* dfs(vector<int>& nums, int l, int r)
{
if(l > r)
return NULL;
int mid = (l+r) >> 1;
TreeNode* node = new TreeNode(nums[mid]);
node->left = dfs(nums, l, mid-1);
node->right = dfs(nums, mid+1, r);
return node;
}
};