109 - Convert Sorted List to Binary Search Tree

来源:互联网 发布:中日友好医院 网络挂号 编辑:程序博客网 时间:2024/05/01 22:34

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

Subscribe to see which companies asked this question

思路分析:

这题的关键是能找出当前链表的中间节点,然后再递归左右的子链表,开始的时候程序先计算链表总厂,然后传入两个前后索引指针,最后每次递归找出中间节点即可。

/** * 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 calLen(ListNode *node)    {        int len = 0;        while(node)        {            len++;            node = node->next;        }        return len;    }        TreeNode *createTree(ListNode *node, int left, int right)    {        if (left > right)            return NULL;                    int mid = (left + right) / 2;                ListNode *p = node;                for(int i = left; i < mid; i++)            p = p->next;                    TreeNode *leftNode = createTree(node, left, mid - 1);        TreeNode *rightNode = createTree(p->next, mid + 1, right);                TreeNode *tNode = new TreeNode(p->val);                tNode->left = leftNode;        tNode->right = rightNode;                return tNode;            }        TreeNode *sortedListToBST(ListNode *head) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int len = calLen(head);        return createTree(head, 0, len - 1);    }};


0 0
原创粉丝点击