【代码随想录day 20】 力扣 108.将有序数组转换为二叉搜索树

视频讲解:https://www.bilibili.com/video/BV1uR4y1X7qL/?share_source=copy_web\&vd_source=a935eaede74a204ec74fd041b917810c

文档讲解:https://programmercarl.com/0108.将有序数组转换为二叉搜索树.html#思路

力扣题目:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/

这道题可以偷懒将二叉树写成一条队列形式,但是没必要,主要思路如下:

  1. 找到数组中心值作为root根节点,左边作为左子树,右边作为右子树。
  2. 进入递归部分,每次选中中心作为根节点,当左范围大于右范围递归终止。
  3. 最后返回整棵树。
cpp 复制代码
class Solution {
public:
    TreeNode *travesal(vector<int>&nums, int left, int right)
    {
        //判断终止条件
        if(left > right) return NULL;
        int mid = (left + right)/2;
        TreeNode *root= new TreeNode(nums[mid]);
        //递归
        root->left = travesal(nums, left, mid-1);
        root->right = travesal(nums, mid+1, right);

        return root;
    }
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        TreeNode *result = travesal(nums, 0, nums.size()-1);
        return result;
    }
};