leetcode 109. 有序連結串列轉換二叉搜尋樹
阿新 • • 發佈:2018-12-24
題目描述:
給定一個單鏈表,其中的元素按升序排序,將其轉換為高度平衡的二叉搜尋樹。
本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 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; } };