LeetCode108 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */
class Solution {
public:
    // TreeNode *sortedArrayToBST(vector<int> &num) {
    // return sortedArrayToBST(num, 0 , num.size() - 1);
    // }
    // TreeNode *sortedArrayToBST(vector<int> &num, int left, int right) {
    // if (left > right) return NULL;
    // int mid = (left + right) / 2;
    // TreeNode *cur = new TreeNode(num[mid]);
    // cur->left = sortedArrayToBST(num, left, mid - 1);
    // cur->right = sortedArrayToBST(num, mid + 1, right);
    // return cur;
    // }

    TreeNode* sortedArrayToBST(vector<int>& nums) {
        int numsmid = nums.size() / 2 ;
        if(nums.size()==0)
        {
            return NULL;
        }
        TreeNode* root = new TreeNode(nums[numsmid]);
        if(nums.size()==1)
        {
            //root->val = nums[0];
            root->left = NULL;
            root->right = NULL;
        }
         else if(nums.size()==2)
        {
            vector<int> nums1;
            nums1.push_back(nums[0]);
            //root->val = nums[1];
            root->left = sortedArrayToBST(nums1);
            root->right = NULL;
        }
        else
        {
            vector<int> nums1(nums.begin(),nums.begin()+numsmid);
            vector<int> nums2(nums.begin()+numsmid+1,nums.end());
            root->val = nums[numsmid];
            root->left = sortedArrayToBST(nums1);
            root->right = sortedArrayToBST(nums2);
        }
        return root;

        // TreeNode* root = NULL;
        // if(nums.size()<1) {
        // return root;
        // }
        // int medium = nums.size()/2;
        // root = new TreeNode(nums[medium]);
        // vector<int> vec_left(nums.begin(), nums.begin()+medium);
        // vector<int> vec_right(nums.begin()+medium+1, nums.end());
        // root->left = sortedArrayToBST(vec_left);
        // root->right = sortedArrayToBST(vec_right);
        // return root;
    }
};
    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/weixin_40906550/article/details/82470367
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞