2023.7.16
由数组构造二叉搜索树地问题,本题可以借鉴从中序与后序遍历序列构造二叉树 这道题,这类题本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。
下面直接看代码:
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
//中止条件
if(nums.size() == 0) return nullptr;
//分割点
int seg = nums.size()/2;
int rootvalue = nums[seg];
//构建根节点
TreeNode* root = new TreeNode(rootvalue);
//根据分割点 分割左右数组
vector<int> left_nums(nums.begin(),nums.begin()+seg);
vector<int> right_nums(nums.begin()+seg+1,nums.end());
//递归构造左右子树
root->left = sortedArrayToBST(left_nums);
root->right = sortedArrayToBST(right_nums);
return root;
}
};