TGViewer
C/C++ | LeetCode C/C++ | LeetCode @easy_c_plus_task · 3.23K subscribers
Post #1839 316
Задача: 109. Convert Sorted List to Binary Search Tree
Сложность: medium

Дана голова односвязного списка, элементы которого отсортированы в порядке возрастания. Преобразуйте его в сбалансированное по высоте бинарное дерево поиска.

Пример:
Input: head = [-10,-3,0,5,9] Output: [0,-3,9,-10,null,5]

👨‍💻 Алгоритм:

1⃣Так как список односвязный, для нахождения середины используем два указателя: slow_ptr (двигается на 1 узел) и fast_ptr (на 2 узла). Когда fast_ptr дойдёт до конца, slow_ptr будет в середине.

2⃣Для отделения левой части от средней сохраняем prev_ptr, который указывает на узел перед slow_ptr. Затем делаем prev_ptr->next = nullptr, чтобы отсоединить левую часть списка.

3⃣Рекурсивно строим левое поддерево из головы списка, правое — из mid->next. Базовый случай — если head == mid, это лист, возвращаем его как TreeNode.

😎 Решение:
class Solution {
public:
ListNode* findMiddleElement(ListNode* head) {
ListNode* prevPtr = nullptr;
ListNode* slowPtr = head;
ListNode* fastPtr = head;

while (fastPtr != nullptr && fastPtr->next != nullptr) {
prevPtr = slowPtr;
slowPtr = slowPtr->next;
fastPtr = fastPtr->next->next;
}

if (prevPtr != nullptr) {
prevPtr->next = nullptr;
}
return slowPtr;
}

TreeNode* sortedListToBST(ListNode* head) {
if (head == nullptr) {
return nullptr;
}

ListNode* mid = this->findMiddleElement(head);
TreeNode* node = new TreeNode(mid->val);

if (head == mid) {
return node;
}

node->left = this->sortedListToBST(head);
node->right = this->sortedListToBST(mid->next);
return node;
}
};


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_c_plus_task
  1. Oct 17, 2026Задача: 1137. N-th Tribonacci Number Сложность: easy Трибоначчи последовательность Tn опре…
  2. Oct 17, 2026Задача: 834. Sum of Distances in Tree Сложность: hard Есть неориентированное связное дерев…
  3. Oct 13, 2026Задача: 647. Palindromic Substrings Сложность: medium Если задана строка s, верните количе…
  4. Oct 11, 2026Задача: 37. Sudoku Solver Сложность: hard Напишите программу, которая решает судоку, запол…
  5. Oct 9, 2026Задача: 33. Search in Rotated Sorted Array Сложность: medium Дан массив nums, отсортирован…
  6. Oct 7, 2026🔥 Скрытые вакансии с удаленной работой для C/C++ разработчика, которые нигде больше не пу…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →