109. Convert Sorted List to Binary Search Tree(Tree)
阿新 • • 發佈:2019-01-01
題目:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/
描述:將排序連結串列轉換為平衡的二叉搜尋樹
思路: 後序遍歷,例如:[-10,-3,0,5,9]
[-10,-3,0,5,9] mid: 3 len : 5 [-10,-3] [5,9] mid: 2,2 len: 2,2 [-10] [9] mid: 1,1 len 1,1 [] [] [] []
程式碼如下:
/** * 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* PostOrderTraversal(ListNode *root,int len){ //後序遍歷 if(len<=0) return NULL; int mid = len / 2 + len % 2; int i = mid; ListNode *t = root; while(i>1&&t) { i--; t = t->next; } TreeNode *ret = new TreeNode(t->val); ret->left = PostOrderTraversal(root,mid-1); ret->right = PostOrderTraversal(t->next,len-mid); return ret; } TreeNode* sortedListToBST(ListNode* head) { int len = 0; ListNode * t = head; while(t) { len++; t = t->next; } TreeNode *ret = PostOrderTraversal(head,len); return ret; } };