convert sorted list to binary search tree

来源:互联网 发布:淘宝怎么搜爱奇艺会员 编辑:程序博客网 时间:2024/06/11 01:44

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

先找到中间结点作为二叉搜索树根节点,然后递归。

/** * 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:    TreeNode* sortedListToBST(ListNode *head)    {        return sortedListToBST(head, listLength(head));    }    TreeNode* sortedListToBST(ListNode* head, int len)    {        if (len == 0)            return NULL;        if (len == 1)            return new TreeNode(head->val);        //find the middle node        TreeNode* root = new TreeNode(nth_node(head,len/2+1)->val);        root->left = sortedListToBST(head,len/2);        root->right = sortedListToBST(nth_node(head,len/2+2),(len-1)/2);        return root;    }    int listLength(ListNode* node)    {        int n = 0;        while (node)        {            n++;            node = node->next;        }        return n;    }    ListNode* nth_node(ListNode* node, int n)    {        while (--n)          node = node->next;        return node;    }}; 
0 0