题目: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;
}
};