[Leetcode] 108. Convert Sorted Array to Binary Search Tree 解题报告

来源:互联网 发布:游族网络股票千股千评 编辑:程序博客网 时间:2024/06/12 23:09

题目

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

思路

也是很简单的一道题目:首先选取数组的中位数作为根节点,然后递归地构造左子树和右子树,最后合成并返回结果。算法的时间复杂度是O(n),空间复杂度是O(1),因为没有开辟额外的空间。但是如果算上递归调用所占用的栈空间,则空间复杂度为O(logn)。

代码

/** * 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>& nums) {        return sortedArrayToBST(nums, 0, nums.size());    }private:    TreeNode* sortedArrayToBST(vector<int>& nums, int start, int len) {        if (len <= 0) {            return NULL;        }        int mid = start + len / 2;        int len1 = mid - start;        int len2 = len - len1 - 1;        TreeNode* root = new TreeNode(nums[mid]);        root->left = sortedArrayToBST(nums, start, len1);        root->right = sortedArrayToBST(nums, mid + 1, len2);        return root;    }};

0 0
原创粉丝点击