题目描述:
主要思路:
对于有序数组构建平衡搜索二叉树直接利用递归实现就行,但是对于链表,就没有办法直接取中值然后递归左右子树了。
本题主要利用二叉搜索树的中序遍历是递增序列的性质,在遍历的过程中进行树的构建。
class Solution {
public:
int getlen(ListNode* head)
{
int n=0;
while(head!=nullptr)
{
head=head->next;
n+=1;
}
return n;
}
TreeNode* find(ListNode*& head,int l,int r)
{
if(l>r) return nullptr;
TreeNode * root = new TreeNode();
int mid=l+r>>1;
root->left = find(head,l,mid-1);
root->val = head->val;
head = head->next;
root->right = find(head,mid+1,r);
return root;
}
TreeNode* sortedListToBST(ListNode* head) {
int n=getlen(head);
return find(head,0,n-1);
}
};