1、思路
-
若要使二叉树高度最小,就必须让左右子树节点数量尽可能保持一致,即让数组的中间节点成为根节点;
-
从根节点开始,以递归的方式将数组中间的值插入到树中;
2、代码
class Solution {
public:
TreeNode* dfs(vector<int>& nums, int left, int right)
{
if (left > right) return nullptr;
int mid = left + (right - left) / 2;
auto p = new TreeNode(nums[mid]); //将中间值构造成节点
p->left = dfs(nums, left, mid - 1); //递归构造左子树
p->right = dfs(nums, mid + 1, right); //递归构造右子树
return p; //返回构造的根节点
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
return dfs(nums, 0, nums.size() - 1);
}
};