LeetCode | Convert Sorted List to Binary Search Tree

来源:互联网 发布:sqlyog修改数据库密码 编辑:程序博客网 时间:2024/05/28 16:05

题目:

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

思路:

类似http://blog.csdn.net/lanxu_yy/article/details/11898523,不过需要利用链表的方式找到中间节点。

代码:

/** * 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:    ListNode* getMid(ListNode *head, ListNode *tail)    {        if(head == tail)            return NULL;        else        {            ListNode * slow=head;            ListNode * fast=head;            while(fast != tail && fast->next != tail)            {                slow = slow->next;                fast = fast->next->next;            }            return slow;        }    }        TreeNode *sortedListToBST(ListNode *head) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        return sortedArrayToBST(head, NULL);    }        TreeNode *sortedArrayToBST(ListNode *head, ListNode *tail)    {                ListNode * p = getMid(head, tail);        if(p == NULL)        {            return NULL;        }        else        {            TreeNode * parent = new TreeNode(p->val);            parent->left = sortedArrayToBST(head, p);            parent->right = sortedArrayToBST(p->next, tail);            return parent;        }    }};


原创粉丝点击