首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode Convert Sorted List to BST:鏈表轉數組復用數組解法

     編輯:關於C++

題目回顧

有序單鏈表轉高度平衡 BST。

簡單做法:鏈表 → 數組 → 遞歸構建

時間 O(n),空間 O(n)(數組 + 遞歸棧)。代碼復用 LeetCode 108。

C++ 代碼

class Solution {
public:
    TreeNode* sortedListToBST(ListNode* head) {
        vector nums;
        for (ListNode* p = head; p; p = p->next) nums.push_back(p->val);
        return build(nums, 0, nums.size() - 1);
    }
    
private:
    TreeNode* build(vector& nums, int l, int r) {
        if (l > r) return nullptr;
        int mid = (l + r) / 2;
        TreeNode* root = new TreeNode(nums[mid]);
        root->left = build(nums, l, mid - 1);
        root->right = build(nums, mid + 1, r);
        return root;
    }
};

進階:O(1) 空間(快慢指針找中點)

不轉數組,直接在鏈表上用快慢指針找中點作為根,斷開左右遞歸。時間 O(n log n),空間 O(log n) 遞歸棧。面試可作為優化方向討論。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved