Convert Sorted List to Binary Search Tree
Q:
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
A:
只能想到递归的办法,但是找中点是一个很麻烦的事情,就先构造一个数组,然后再搞。速度上会稍微快一些。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode *sortedListToBST(ListNode *head) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> node_arr; ListNode* cur = head; while (cur) { node_arr.push_back(cur->val); cur = cur->next; } node_arr.resize(node_arr.size()); return SortedArrayToBST(node_arr, 0, node_arr.size() - 1); } private: TreeNode* SortedArrayToBST(const vector<int>& arr, int begin, int end) { if (begin > end) return NULL; int mid = (end + begin) / 2; TreeNode* root = new TreeNode(arr[mid]); if (begin == end) return root; TreeNode* left = SortedArrayToBST(arr, begin, mid - 1); TreeNode* right = SortedArrayToBST(arr, mid + 1, end); root->left = left; root->right = right; return root; } };
Passion, patience, perseverance, keep it and move on.

浙公网安备 33010602011771号