106. 排序列表转换为二分查找树
给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树
您在真实的面试中是否遇到过这个题?
Yes
样例
2
1->2->3 => /
1 3
标签
/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @param head: The first node of linked list. * @return: a tree node */ TreeNode *sortedListToBST(ListNode *head) { // write your code here //用递归 TreeNode* root = nullptr; if (head != nullptr) { ListNode *left = nullptr, *right = nullptr; root = new TreeNode(dichotomyList(head, left, right)); root->left = sortedListToBST(left); root->right = sortedListToBST(right); } } int dichotomyList(ListNode *head, ListNode *&left, ListNode *&right) { if (head->next != nullptr) { ListNode *fast = head, *slow = head, *temp = head; while (fast != nullptr && fast->next != nullptr) { temp = slow; slow = slow->next; fast = fast->next->next; } temp->next = nullptr; left = head; right = slow->next; return slow->val; } else { left = nullptr; right = nullptr; return head->val; } } };