题目地址
和上题108类似,关键在于分割当前链表,记得将左子链表尾部置NULL。
class Solution {
public:
TreeNode *sortedListToBST(ListNode *head) {
if (!head) {
return NULL;
}
int size = 0;
ListNode *p = head;
while (p) {
size++;
p = p->next;
}
ListNode *pre = NULL;
p = head;
for (int i = 0; i < size / 2; ++i) {
pre = p;
p = p->next;
}
TreeNode *root = new TreeNode(p->val);
if (pre) {//有左孩子
pre->next = NULL;
root->left = sortedListToBST(head);
}
root->right = sortedListToBST(p->next);
return root;
}
};
本文介绍了一种将已排序的链表转换为高度平衡的二叉搜索树的方法。通过递归地找到链表的中点作为根节点,并将链表分割成左右两部分分别构建左子树和右子树,最终实现从链表到二叉搜索树的高效转换。
383

被折叠的 条评论
为什么被折叠?



