方法一:将链表转为数组来处理
解题思路:
因为链表不好处理,所以我先把链表处理成数组,因为是一个升序数组,所以直接将中间的数当成根结点,然后对左半部分的节点和右半部分的节点进行递归构建二叉搜索树。
在递归函数中,有两种情况需要考虑。第一种情况是传入的left值大于right值,说明是个null节点;第二种情况是传入的left==right,说明传入的区间只有一个节点,返回该节点即可。
/**
* 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* sortedListToBST(ListNode* head) {
if(head == NULL) return NULL;
//先将链表转为数组
vector<int> nums;
while(head){
nums.push_back(head->v