Convert Sorted List to Binary Search Tree
Given
a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
解题思路:
题意为构造有序链表的二分查找树。找到中间节点的办法用双指针法。注意我们还须要保存中间节点的前一个节点,便于一个链表分成两个链表。注意滴38行,是将链表恢复成原来的模样。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* sortedListToBST(ListNode* head) { if(head == NULL){ return NULL; } ListNode* myHead = new ListNode(0); myHead->next = head; ListNode* pre = myHead; ListNode* one = head, *two = head; while(two->next!=NULL && two->next->next!=NULL){ pre = pre->next; one = one->next; two = two->next->next; } two = one->next; pre->next = NULL; TreeNode* root = new TreeNode(one->val); root->left = sortedListToBST(myHead->next); root->right = sortedListToBST(two); pre->next = one; //恢复链表结构 //delete one; //这里为啥不能删除? delete myHead; return root; } };