Leetcode109有序链表转换二叉搜索树
因为是升序的
所以利用快慢指针找到中间结点,将中间结点作为根节点
再递归左子树和右子树
TreeNode *sortedListToBST(ListNode *head)
{
return buildTree(head,nullptr);
}
TreeNode *buildTree(ListNode *head,ListNode *tail)
{
if(head == tail) return nullptr;
ListNode *slow = head, *fast = head;
while(fast != tail && fast->next != tail)
{
slow = slow->next;
fast = fast->next->next;
}
TreeNode *root = new TreeNode(slow->val);
root->left = buildTree(head,slow);
root->right = buildTree(slow->next,tail);
return root;
}
保持好奇心!

浙公网安备 33010602011771号