Convert Sorted List to Binary Search Tree

来源:互联网 发布:linux内核进程调度 编辑:程序博客网 时间:2024/05/01 14:39

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

这道题和之前数组的那题,基本的思想是一样的,都是要找到最中间的那个数,作为根节点。这是对于List,该如何去寻找。我们选择遍历list一遍。

然后得到该链表的长度。以及下一次链表起始的位置,结束的位置。

/** * 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:    int getLen(ListNode *node)    {        int len = 0;        while(node)        {            len++;            node = node->next;        }        return len;    }        TreeNode *solve(ListNode *node, int l, int r)    {        if (l > r)            return NULL;                    int mid = (l + r) / 2;                ListNode *p = node;                for(int i = l; i < mid; i++)            p = p->next;                    TreeNode *leftNode = solve(node, l, mid - 1);        TreeNode *rightNode = solve(p->next, mid + 1, r);                TreeNode *tNode = new TreeNode(p->val);                tNode->left = leftNode;        tNode->right = rightNode;                return tNode;            }        TreeNode *sortedListToBST(ListNode *head) {        int len = getLen(head);        return solve(head, 0, len - 1);    }};


0 0
原创粉丝点击