LeetCode刷题日记 2020/08/18
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定的有序链表: [-10, -3, 0, 5, 9],
一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree
思路:
按照升序排列的单链表,我们只需要找到他的中间结点,让他成为树的根节点,中间结点前面的就是根节点左子树的所有节点,中间节点后面的就是根节点右子树的所有节点,然后使用递归的方式再分别对左右子树进行相同的操作
代码如下
- public class Test01 {
- public static void main(String[] args) {
- ListNode head = new ListNode(-10);
- ListNode listNode1 = new ListNode(-3);
- ListNode listNode2 = new ListNode(0);
- ListNode listNode3 = new ListNode(5);
- ListNode listNode4 = new ListNode(9);
- head.next = listNode1;
- listNode1.next = listNode2;
- listNode2.next = listNode3;
- listNode3.next = listNode4;
- TreeNode1 treeNode1 = Solution.sortedListToBST(head);
- System.out.println(treeNode1);
- }
- }
- //Definition for singly-linked list.
- class ListNode {
- int val;
- ListNode next;
- ListNode() {
- }
- ListNode(int val) {
- this.val = val;
- }
- ListNode(int val, ListNode next) {
- this.val = val;
- this.next = next;
- }
- }
- // * Definition for a binary tree node.
- class TreeNode1 {
- int val;
- TreeNode1 left;
- TreeNode1 right;
- TreeNode1() {
- }
- TreeNode1(int val) {
- this.val = val;
- }
- TreeNode1(int val, TreeNode1 left, TreeNode1 right) {
- this.val = val;
- this.left = left;
- this.right = right;
- }
- }
- class Solution {
- public static TreeNode1 sortedListToBST(ListNode head) {
- //边界条件的判断
- if (head == null)
- return null;
- if (head.next == null)
- return new TreeNode1(head.val);
- //这里通过快慢指针找到链表的中间结点slow,pre就是中间
- //结点slow的前一个结点
- ListNode slow = head, fast = head, pre = null;
- while (fast != null && fast.next != null) {
- pre = slow;
- slow = slow.next;
- fast = fast.next.next;
- }
- //链表断开为两部分,一部分是node的左子节点,一部分是node
- //的右子节点
- pre.next = null;
- //node就是当前节点
- TreeNode1 node = new TreeNode1(slow.val);
- //从head节点到pre节点是node左子树的节点
- node.left = sortedListToBST(head);
- //从slow.next到链表的末尾是node的右子树的结点
- node.right = sortedListToBST(slow.next);
- return node;
- }
- }
LeetCode刷题日记 2020/08/18的更多相关文章
- Leetcode | 刷题日记(1)
本文记录个人刷题记录 推荐两个刷题网站: 地址:https://leetcode.com/ 另外一个地址:http://www.lintcode.com/ 1.Write a SQL query to ...
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
- LeetCode刷题总结-树篇(上)
引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...
- C#LeetCode刷题-动态规划
动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串 22.4% 中等 10 正则表达式匹配 18.8% 困难 32 最长有效括号 23.3% 困难 44 通配符匹配 17.7% ...
- C#LeetCode刷题-字符串
字符串篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串 24.6% 中等 5 最长回文子串 22.4% 中等 6 Z字形变换 35.8% 中等 8 字符串转整数 (atoi) ...
- C#LeetCode刷题-双指针
双指针篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串 24.5% 中等 11 盛最多水的容器 43.5% 中等 15 三数之和 16.1% 中等 16 最接近的三数之和 3 ...
- C#LeetCode刷题-数组
数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...
- C#LeetCode刷题-哈希表
哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串 24.2% 中等 18 四数之和 ...
- LeetCode刷题的一点个人建议和心得
目录 1. 为什么我们要刷LeetCode? 2. LeetCode的现状和问题 3. 本文的初衷 4. LeetCode刷题建议 4.1入门数据结构,打基础阶段 4.2 建立 ...
- leetcode 刷题进展
最近没发什么博客了 凑个数 我的leetcode刷题进展 https://gitee.com/def/leetcode_practice 个人以为 刷题在透不在多 前200的吃透了 足以应付非算法岗 ...
随机推荐
- 【JAVA基础】String处理
String处理 字符串查找子串及截取 // 保存的头像文件的文件名 String suffix = ""; String originalFilename = file.getO ...
- 我让 ChatGPT 化身为全知全能的文档小助理,啥姿势她都会......
ChatGPT 虽然只是一个对话型人工智能,但已经震惊了全世界,有人甚至认为人工智能的奇点已经到来.未来一定会有很多人失业,从工业革命开始,每出现一次重大的技术变革,就必然会有一批人失业,我们要直面现 ...
- shell脚本(7)-shell运算
文档目录: 一.算数运算符 二.关系运算符 三.布尔运算符 四.逻辑运算符 五.字符串运算符 六.文件测试运算符 算术运算符 下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20: ...
- java项目实践-tomcat实现用户登录-day17
目录 1. 安装 2. 初识tomcat 2. 创建tomcat项目 3. 启动之前 3. java jsp 4. Request Response对象的其他属性 5. 用户登录小功能 1. 安装 t ...
- kibana上执行ES DSL语言查询数据并查看表结构与数据、删除索引、查看文件大小
转载请注明出处: 1.kibana 上执行DSL 语言: 在kibana 中找到 Dev Tools,并双击打开,就可以进入执行DSL得执行页面了 执行DSL,示例如图: 2.在kibana上查看ES ...
- 02-VS调试以及Qt基本使用
VS调试以及Qt基本使用 1.汇编语言 1.1 VS中C语言嵌套汇编代码(了解) #include <stdio.h> int main() { //定义整型变量a, b, c int a ...
- 【ArgParse】一个开源的入参解析库
项目地址:argtable3 本地验证: 编译构建 新增验证 // examples/skull.c #include "argtable3.h" int main(int arg ...
- [转帖]ssh时不输入YES
vim /etc/ssh/ssh_config 60行新添加 StrictHostKeyChecking no
- 【转帖】奇淫技巧 | route命令设置网络优先级
奇淫技巧 | route命令设置网络优先级 https://blog.csdn.net/DynmicResource/article/details/120134745 1. 背景 在生活中的会经常遇 ...
- [转帖]Linux中的Page cache和Buffer cache详解
1.内存情况 在讲解Linux内存管理时已经提到,当你在Linux下频繁存取文件后,即使系统上没有运行许多程序,也会占用大量的物理内存.这是因为当你读写文件的时候,Linux内核为了提高读写的性能和速 ...