鏈接
https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/
耗時
解題:20 min
題解:14 min
題意
將一個按照升序排列的有序數組,轉換爲一棵高度平衡二叉搜索樹。
本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
思路
遞歸解決。
根節點的值應該是有序數組正中間的數,這樣左右子樹才能平衡。根節點的左子樹就是數組最左邊到中間,右子樹是中間到最右邊。同樣的左子樹的根節點的值應該是數組最左邊到中間這段區間正中間的值,右子樹同理。依此類推下去,直到子樹所對應的數組區間中不存在元素爲止。
時間複雜度:
AC代碼
/**
* 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:
void solve(vector<int>& nums, int l, int r, TreeNode*& root) {
if(l >= r) return ;
int m = l + ((r-l)>>1);
root = new TreeNode;
root->val = nums[m];
solve(nums, l, m, root->left);
solve(nums, m+1, r, root->right);
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
int n = nums.size();
if(n == 0) return NULL;
TreeNode* root;
solve(nums, 0, n, root);
return root;
}
};