109. Convert Sorted List to Binary Search Tree

来源:互联网 发布:mac版finale怎么激活 编辑:程序博客网 时间:2024/06/04 01:34



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 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* Solve(ListNode *&p, int start, int last) {    if (start > last) return NULL;    int iMid = (start + last) / 2;    TreeNode * tnLeft = Solve(p, start, iMid - 1);    TreeNode * root = new TreeNode(p->val);    root->left = tnLeft;    p = p->next;    TreeNode * tnRight = Solve(p, iMid + 1, last);    root->right = tnRight;    return root;    }            TreeNode* sortedListToBST(ListNode* head) {    if (head == NULL) return NULL;    ListNode *p = head;    int iLen = 0;    while (p != NULL)    {    p = p->next;    iLen++;    }    return Solve(head, 0, iLen - 1);    }};


0 0
原创粉丝点击