1 题目
给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(BST)
2 解法
2.1 转化有序链表为数组
/*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/
/*** struct ListNode {* int val;* struct ListNode *next;* };*/class Solution {
public:/*** * @param head ListNode类 * @return TreeNode类*/TreeNode* sortedListToBST(ListNode* head) {// write code hereif (!head)return nullptr;vector<int> tmpList;for (auto p = head; p; p = p->next) {tmpList.push_back(p->val);}TreeNode* res = toBST(0, tmpList.size(), tmpList);return res;}TreeNode* toBST(int start, int end, vector<int> list) {if (start >= end)return nullptr;int target_index = (start + end) / 2;TreeNode* tmp_res = new TreeNode(list[target_index]);tmp_res->left = toBST(start, target_index, list);tmp_res->right = toBST(target_index + 1, end, list);return tmp_res;}
};
这么玩儿有点违背出题者初衷了