leetcode - Convert Sorted List to Binary Search Tree
2013-03-28 10:23 张汉生 阅读(114) 评论(0) 编辑 收藏 举报题目描述:点击此处
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 /** 10 * Definition for binary tree 11 * struct TreeNode { 12 * int val; 13 * TreeNode *left; 14 * TreeNode *right; 15 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 16 * }; 17 */ 18 class Solution { 19 public: 20 TreeNode *sortedListToBST(ListNode *head) { 21 // Start typing your C/C++ solution below 22 // DO NOT write int main() function 23 if (head==NULL) 24 return NULL; 25 int size = 0; 26 ListNode * middle = head; 27 while (middle != NULL){ 28 size++; 29 middle = middle->next; 30 } 31 size /= 2; 32 ListNode * last = NULL; 33 middle = head; 34 while (size>0){ 35 last = middle; 36 middle = middle->next; 37 size--; 38 } 39 TreeNode * root = new TreeNode(middle->val); 40 if (middle != head){ 41 last->next = NULL; 42 root->left = sortedListToBST(head); 43 } 44 root->right = sortedListToBST(middle->next); 45 return root; 46 } 47 };