LeetCode解題報告 108. Convert Sorted Array to Binary Search Tree [medium]

conniemessi發表於2016-12-20

題目描述

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

解題思路

題目要求對一個已經排好序的陣列來構造一顆平衡二叉樹。

平衡二叉樹指的是對於樹上任意一個節點,其左右子樹的高度差不超過1。

若兩顆子樹節點數量相同,且使用同樣的方法來進行構造。那麼它們的形態應該是相同的,層數也相同。舉個例子:

     1
    / \
   X   Y
  / \ / \
  X X Y Y

若兩顆子樹節點數量相差1,則構造出的子樹層數至多相差1。舉個例子:

     1
    / \
   X   Y
  / \ / 
  X X Z 

只需要保證每一次遞迴處理構造的左右子樹節點數量最多不超過1,就可以保證生成的二叉樹滿足高度平衡的性質。因此,每一次以中位數進行分割,將陣列分割為左右兩個部分,對左右兩個子樹執行相同的操作,不斷從中點劃分,來遞迴構造二叉樹。

複雜度分析

時間複雜度為O(n),空間複雜度為O(n)。

程式碼如下:

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        if (nums.size()==0) {
            return NULL;
        }
        int medium=nums.size()/2;
        vector<int>leftlist(nums.begin(),nums.begin()+medium);
        vector<int>righlist(nums.begin()+medium+1,nums.end());
        TreeNode* result=new TreeNode(nums[medium]);
        result->left=sortedArrayToBST(leftlist);
        result->right=sortedArrayToBST(righlist);
        
        return result;
    }
};

參考:
https://www.tianmaying.com/tutorial/LC108

相關文章