有序連結串列轉換二叉搜尋樹
阿新 • • 發佈:2020-12-18
技術標籤:連結串列二叉樹連結串列二叉樹資料結構leetcode
題目描述:
給定一個單鏈表,其中的元素按升序排序,將其轉換為高度平衡的二叉搜尋樹。
本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
示例:
給定的有序連結串列: [-10, -3, 0, 5, 9],
一個可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面這個高度平衡二叉搜尋樹:
連結:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree
思路分析:連結串列尋找中間值是很麻煩的,將連結串列中的值儲存到vector<int>中,這樣支援隨機訪問,然後進行構造即可。
程式碼:
class Solution {
public:
vector<int> v;//vector陣列
TreeNode* FormBST(int start, int end)
{
if(start >= end)//終止條件
return nullptr;
int cur = (start + end) >> 1;//中間節點
TreeNode* root = new TreeNode(v[cur]);//根節點
root->left = FormBST (start,cur);//左子樹
root->right = FormBST(cur + 1,end);//右子樹
return root;
}
TreeNode* sortedListToBST(ListNode* head) {
if(head == nullptr)
return nullptr;
while(head != nullptr)
{
v.push_back(head->val);
head = head- >next;
}
return FormBST(0,v.size());//構造bst,然後返回
}
};