LeetCode 题解(154): Convert Sorted List to Binary Search Tree

2024-05-28 09:08

本文主要是介绍LeetCode 题解(154): Convert Sorted List to Binary Search Tree,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

题解:

递归。

C++版:

class Solution {
public:TreeNode* sortedListToBST(ListNode* head) {if(!head)return NULL;int length = 0;ListNode* p = head;while(p) {p = p->next;length++;}return toBST(head, length);}ListNode* findMid(ListNode* head, int pos) {ListNode* p = head;int i = 0;while(i < pos) {p = p->next;i++;}return p;}TreeNode* toBST(ListNode* head, int length) {if(length == 0) {return NULL;}else if(length == 1) {TreeNode* root = new TreeNode(head->val);return root;} else {ListNode* mid = findMid(head, (length - 1) / 2);TreeNode* root = new TreeNode(mid->val);root->left = toBST(head, (length-  1) / 2);root->right = toBST(mid->next, length - (length + 1) / 2);return root;}}
};

Java版:

public class Solution {public TreeNode sortedListToBST(ListNode head) {int length = 0;ListNode p = head;while(p != null) {p = p.next;length++;}return toBST(head, length);}public TreeNode toBST(ListNode head, int length) {if(length == 0) {return null;} else if(length == 1) {return new TreeNode(head.val);} else {ListNode mid = findMid(head, length);TreeNode root = new TreeNode(mid.val);root.left = toBST(head, (length - 1) / 2);root.right = toBST(mid.next, length - (length + 1) / 2);return root;}}public ListNode findMid(ListNode head, int length) {ListNode p = head;int i = 0;while(i < (length - 1) / 2) {p = p.next;i++;}return p;}
}

Python版:

class Solution:# @param {ListNode} head# @return {TreeNode}def sortedListToBST(self, head):length = 0p = headwhile p != None:p = p.nextlength += 1return self.toBST(head, length)def toBST(self, head, length):if length == 0:return Noneelif length == 1:return TreeNode(head.val)else:mid = self.findMid(head, length)root = TreeNode(mid.val)root.left = self.toBST(head, (length - 1) / 2)root.right = self.toBST(mid.next, length - (length + 1) / 2)return rootdef findMid(self, head, length):p, i = head, 0while i < (length - 1) / 2:p = p.nexti += 1return p

这篇关于LeetCode 题解(154): Convert Sorted List to Binary Search Tree的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010132

相关文章

LeetCode11. 盛最多水的容器题解

LeetCode11. 盛最多水的容器题解 题目链接: https://leetcode.cn/problems/container-with-most-water 示例 思路 暴力解法 定住一个柱子不动,然后用其他柱子与其围住面积,取最大值。 代码如下: public int maxArea1(int[] height) {int n = height.length;int

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

-bash: /bin/mv: Argument list too long mv

把labels下的所有文件mv到img文件夹下: mv labels/* img/ 报错: -bash: /bin/mv: Argument list too long  mv # Using find ... -exec + find folder2 -name '*.*' -exec mv --target-directory=folder '{}' +   # Using xar

LeetCode--231 2的幂

题目 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 示例 示例 1:输入: 1输出: true解释: 20 = 1示例 2:输入: 16输出: true解释: 24 = 16示例 3:输入: 218输出: false class Solution {public:bool isPowerOfTwo(int n) {if (n <= 0) return fals

LeetCode--234 回文链表

题目 请判断一个链表是否为回文链表。 示例 示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val

LeetCode--220 存在重复元素 III

题目 给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。 示例 示例 1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t = 2输出: true示例

LeetCode--217 存在重复元素

题目 给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 示例 示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true class Solution {p

LeetCode--214 最短回文串

题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 示例 1:输入: "aacecaaa"输出: "aaacecaaa"示例 2:输入: "abcd"输出: "dcbabcd" 思路: 我们需要添加多少个字符与给定字符串的前缀子串回文的长度有关. 也就是说去掉其前缀的回文子串,我们只需要补充剩下的子串的逆序

LeetCode--206 反转链表

题目 反转一个单链表。 示例 示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL class Solution {public:ListNode* reverseList(ListNode* head) {if (head == nullptr || head->next == nullptr){return head;}ListNo

LeetCode--204 计数质数

题目 统计所有小于非负整数 n 的质数的数量。 示例 示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 class Solution {public:int countPrimes(int n) {if (n <= 2) return 0;int cnt = 0;vector<bool> isPrime(n, true);