题意为将一个排序好的单向链表转换为一棵平衡二叉树
此题需要用到递归的思想:
若给定一个有序链表,转换为平衡二叉树,则中间的结点为root,中间结点左侧结点位于root的左子树部分,中间结点右侧结点位于root的右子树部分,运用递归的思想不断迭代即可,注意每次迭代均应注明本次迭代的第一个结点和最后一个结点,下面给出代码:
TreeNode* sortedListToBST(ListNode* head) {
return LTB(head, NULL);
}
TreeNode* LTB(ListNode* head, ListNode *end){
if(head == end) return NULL;
if(head->next == end){
TreeNode *root = new TreeNode(head->val);
return root;
}
ListNode *mid = head;
ListNode *fast = head;
while(fast != end && fast->next != end){
mid = mid->next;
fast = fast->next->next;
}
TreeNode *root = new TreeNode(mid->val);
root->left = LTB(head, mid);
root->right = LTB(mid->next, end);
return root;