【LeetCode从零单刷】Convert Sorted List to Binary Search Tree

来源:互联网 发布:微信开发 php java 编辑:程序博客网 时间:2024/05/01 08:07

题目:

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

解答:

将一段有序序列转换为平衡二叉树,重要是递归。即中点作为根节点,小于部分作为左子树递归,大于部分作为右子树递归。

这里的单链表给 “找中点” 造成了难题,我们可以使用快慢指针的技巧。快指针一次2步,慢指针一次1步,快指针到了终点,慢指针即为中点。

注意:单链表的终点(终点无法取到)是 NULL。

/** * 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* sortedRangeToBST(ListNode* start, ListNode* end) {        if(start == end)    return NULL;                ListNode* p = start;        ListNode* q = start;                while(q != end && q->next != end) {            p = p->next;            q = q->next->next;        }                TreeNode* mid = new TreeNode(p->val);        mid->left   = sortedRangeToBST(start, p);        mid->right  = sortedRangeToBST(p->next, end);        return mid;    }    TreeNode* sortedListToBST(ListNode* head) {        return sortedRangeToBST(head, NULL);    }};

0 0
原创粉丝点击