排序列表转换为二分查找树-LintCode

来源:互联网 发布:女性情趣用品淘宝 编辑:程序博客网 时间:2024/06/06 17:45

给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树
样例:
这里写图片描述

#ifndef C106_H#define C106_H#include<iostream>using namespace std;class TreeNode{public:    int val;    TreeNode *left, *right;    TreeNode(int val){        this->val = val;        this->left = this->right = NULL;    }};class ListNode{public:    int val;    ListNode *next;    ListNode(int val){        this->val = val;        this->next = NULL;    }};class Solution {public:    /**    * @param head: The first node of linked list.    * @return: a tree node    */    TreeNode *sortedListToBST(ListNode *head) {        // write your code here        if (head == NULL)            return NULL;        ListNode *dummy = new ListNode(-1);        dummy->next = head;        ListNode *fast = head, *slow = dummy;        while (fast != NULL&&fast->next != NULL)        {            slow = slow->next;            fast = fast->next->next;        }        TreeNode *root = new TreeNode(slow->next->val);        ListNode *second = slow->next->next;        slow->next = NULL;        ListNode *first = dummy->next;        root->left = sortedListToBST(first);        root->right = sortedListToBST(second);        return root;    }};#endif