LeetCode 109 有序链表转换二叉树
LeetCode 109.有序链表转换二叉搜索树
给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。
示例 1:
输入: head = [-10,-3,0,5,9]
输出: [0,-3,9,-10,null,5]
解释: 一个可能的答案是[0,-3,9,-10,null,5],它表示所示的高度平衡的二叉搜索树。
示例 2:
输入: head = []
输出: []
提示:
- head 中的节点数在[0, 2 * 104] 范围内
- -105 <= Node.val <= 105
思路:递归
- 先遍历链表,把所有的值存入数组
- 用二分的方式,取中间的值做为根节点(保证左右子树高度不超过1)
- 用步骤 1,2 继续求左右子树的根节点
TreeNode* sortedListToBST(ListNode* head) {
vector<int> nums;
while (head) {
nums.push_back(head->val);
head = head->next;
}
return helper(nums, 0, nums.size() - 1);
}
TreeNode* helper(vector<int> &nums, int l, int r) {
if (l > r)
return nullptr;
int mid = (l + r) / 2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = helper(nums, l, mid - 1);
root->right = helper(nums, mid + 1, r);
return root;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理