Convert Sorted List to Binary Search Tree

来源:互联网 发布:阿里云ddns客户端 编辑:程序博客网 时间:2024/05/01 18:05

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


Solution:

/** * 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* dfs(ListNode*& head, int left, int right)    {        if(left > right) return NULL;        int mid = (left + right) / 2;        TreeNode* leftTree = dfs(head, left, mid - 1);        TreeNode* root = new TreeNode(head->val);        head = head->next;        TreeNode* rightTree = dfs(head, mid + 1, right);        root->left = leftTree;        root->right = rightTree;        return root;    }    TreeNode* sortedListToBST(ListNode* head) {        int len = 0;        ListNode* p = head;        while(p != NULL)        {            len++;            p = p->next;        }        return dfs(head, 0, len - 1);    }};


0 0