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

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

技術標籤:連結串列二叉樹連結串列二叉樹資料結構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,然後返回 } };