109-Convert Sorted List to Binary Search Tree

来源:互联网 发布:网络购物平台图片大全 编辑:程序博客网 时间:2024/06/05 09:36
题目

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

分析

这个和Covert Sorted Array to Binary Search Tree 其实是类似的,都是通过递归构造

关键就在于如何找到链表的中间结点。

链表的中间结点可以用快慢指针来实现。

处理的时候要比较细心,有三种情况
1. 头尾指针指向同一个结点
2. 头尾指针指向相邻结点
3. 头尾指针中间间隔的结点>= 2个

实现
class Solution {public:    //109. Convert Sorted List to Binary Search Tree    TreeNode* sortedListToBST(ListNode* head) {        if (!head)            return NULL;        return  sortedListToBSTHelper(head, NULL);    }    TreeNode* sortedListToBSTHelper(ListNode* start, ListNode* end)    {           //指向同一个结点        if (start == end)            return NULL;        //指向相邻结点        if (start->next == end)        {            TreeNode *root = new TreeNode(start->val);            return root;        }        ListNode *slow = start, *fast = start;        //指向不相邻结点        while (fast->next != end&&fast->next->next != end)        {            fast = fast->next->next;            slow = slow->next;        }        TreeNode * root = new TreeNode(slow->val);        root->left = sortedListToBSTHelper(start, slow);        root->right = sortedListToBSTHelper(slow->next, end);        return root;    }};
原创粉丝点击