1. 程式人生 > >leetcode 109. 有序連結串列轉換二叉搜尋樹

leetcode 109. 有序連結串列轉換二叉搜尋樹

題目描述:

給定一個單鏈表,其中的元素按升序排序,將其轉換為高度平衡的二叉搜尋樹。

本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。

示例:

給定的有序連結串列: [-10, -3, 0, 5, 9],

一個可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面這個高度平衡二叉搜尋樹:

      0
     / \
   -3   9
   /   /
 -10  5

思路:遞迴。首先把連結串列轉換成陣列,遞迴插入陣列的中間元素。

程式碼:

class Solution {
public:
    TreeNode* sortedListToBST(ListNode* head) {
        TreeNode *root=NULL;
        vector<int>res;
        while(head){
            res.push_back(head->val);
            head=head->next;
        }
        if(res.size()==0)return root;
        return sort(root,res,0,res.size()-1);
    }
    TreeNode*sort(TreeNode*root,vector<int>res,int le,int ri){//le,ri分別是陣列的起始位置和結束位置
        if(le<=ri){
            vector<int>right_res,left_res;
            int mid=(ri+le)/2;
            root=new TreeNode(res[mid]);
            root->left=sort(root->left,res,le,mid-1);
            root->right=sort(root->right,res,mid+1,ri);
        }
        return root;
    }
};