leetcode笔记:Convert Sorted List to Binary Search Tree

来源:互联网 发布:启用视频网络 编辑:程序博客网 时间:2024/06/05 05:03

一. 题目描述

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

二. 题目分析

这道题只要将列表转化为一个数组,就可以使用和题目Convert Sorted Array to Binary Search Tree一样的方法来进行,这种方法的时间复杂度为O(n),空间复杂度为O(n^2)

三. 示例代码

#include <iostream>#include <vector>using std::vector;struct ListNode{    int val;    ListNode *next;    ListNode(int x) : val(x), next(NULL) {}};struct TreeNode{    int val;    TreeNode *left;    TreeNode *right;    TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution{private:    TreeNode* sortedArrayToBST(vector<int>::iterator Begin,                               vector<int>::iterator End)    {        if (Begin == End)                {                return NULL;                }        vector<int>::iterator HeadIte = Begin + (End - Begin) / 2;        TreeNode *Head = new TreeNode(*HeadIte);        TreeNode *LeftChild = sortedArrayToBST(Begin, HeadIte);        TreeNode *RightChild = sortedArrayToBST(HeadIte + 1, End);        Head->left = LeftChild;        Head->right = RightChild;        return Head;    }public:    TreeNode* sortedListToBST(ListNode* head)    {        vector<int> Nums;        for (ListNode *TmpHead = head; TmpHead; TmpHead = TmpHead->next)        {            Nums.push_back(TmpHead->val);        }        return sortedArrayToBST(Nums.begin(), Nums.end());    }};

四. 小结

以上所使用方法比较简单,但还有可提升的空间。

4 0
原创粉丝点击