数据结构与算法--力扣109题将有序双向链表转换为二叉搜索树
将有序数组转换为二叉搜索树
- 近一年都比较关注算法相关的知识,也刷了不少题,之前的文章中大多也是算法相关的文章,但是感觉每次遇到树相关的题型都不能应对自如,因此还是有必要在相关知识上下功夫,因此有此次总结,以下是所有树相关的文章
数据结构与算法–面试必问AVL树原理及实现
数据结构与算法–二叉树的深度问题
数据结构与算法–二叉堆(最大堆,最小堆)实现及原理
数据结构与算法–二叉查找树转顺序排列双向链表
数据结构与算法-- 二叉树中和为某一值的路径
数据结构与算法-- 二叉树后续遍历序列校验
数据结构与算法-- 广度优先打印二叉树
数据结构与算法–解决问题的方法- 二叉树的的镜像
数据结构与算法–重建二叉树
数据结构与算法–二叉查找树实现原理
数据结构与算法–二叉树实现原理
数据结构与算法–B树原理及实现
数据结构与算法–数字在排序数组中出现次数
数据结构与算法–死磕二叉树
数据结构与算法–二叉树第k个大的节点
数据结构与算法–力扣108提将有序数组转换为二叉搜索树
原题
- 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
- 通上一篇中一样,平衡二叉树,高度差不超过1,其实就是AVL树
分析
- AVL(Adelson-Velskii 和landis)树是带有平衡条件的二叉查找树,这个平衡条件必须容易实现,并且保证树的深度必须是O(logN)。因此我们让一棵AVL树中每个节点的左子树和右子树的高度最多相差1(空树高度定义-1)如下图,左边是AVL树,右边不是AVL树。
- 对AVl树的构建实现以及原理在之前的文章 数据结构与算法–面试必问AVL树原理及实现 有做详细的分析
- 算法分析:
- 同上篇中思路,因为是顺序链表,并且要求平衡二叉树,那么左右节点数一样,链表中间节点middle就是树的根
- head节点到middle是leftTree, middle节点到Tail是rightTree
- 同样对于左子树,右子树,也依据第一步骤中,取中间节点作为根,分别得出对应的树结构
- 如上,中间节点查找我们可以用快慢指针,fast每次2步,slow每次一步,得到的slow就是中间节点
- 首先我们对head~ ail(此时tail可以用null代替,最后节点就是null节点),得到中间节点slow,并且构建根slowNode
- 接着我们分别对head ~ slow ,slow.next ~ tail分别求中间节点并且构建对应的树节点,依次递归每个左右子树
算法实现
- 实现中所有的链表节点ListNode, 树节点BinaryNode的实现均出自自己的算法实现在之前的文章中有详细的实现分析。
/*** @author liaojiamin* @Date:Created in 14:31 2022/2/22*/
public class ConverListToBinary {public static void main(String[] args) {ListNode listNode = new ListNode("i", 1);for (int i = 6; i < 26; i++) {MyLinkedList.addToTail(listNode, i + "_"+ i, i);}ListNode head = listNode;ListNode headNext = listNode.getNext();while (headNext != null){headNext.setBefore(head);head = headNext;headNext = headNext.getNext();}BinaryNode binaryNode = buildTree(listNode, null);BinarySearchTree binarySearchTree = new BinarySearchTree();binarySearchTree.printTree(binaryNode);}public static BinaryNode buildTree(ListNode listNode, ListNode tail){if(listNode == tail){return null;}ListNode slow = listNode;ListNode fast = listNode;while (fast != tail && fast.getNext() != tail){fast = fast.getNext().getNext();slow = slow.getNext();}BinaryNode binaryNode = new BinaryNode(slow.getValue(), null, null);binaryNode.setLeft(buildTree(listNode, slow));binaryNode.setRight(buildTree(slow.getNext(), tail));return binaryNode;}
}
上一篇:数据结构与算法–力扣108题将有序数组转换为二叉搜索树
数据结构与算法--力扣109题将有序双向链表转换为二叉搜索树相关推荐
- 数据结构与算法--力扣108题将有序数组转换为二叉搜索树
力扣108提将有序数组转换为二叉搜索树 近一年都比较关注算法相关的知识,也刷了不少题,之前的文章中大多也是算法相关的文章,但是感觉每次遇到树相关的题型都不能应对自如,因此还是有必要在相关知识上下功夫, ...
- 【数据结构与算法】之深入解析“将有序数组转换为二叉搜索树”的求解思路与算法示例
一.题目要求 给你一个整数数组 nums ,其中元素已经按升序排列,请你将其转换为一棵高度平衡 二叉搜索树. 高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树. ...
- [Leetcode][第109题][JAVA][有序链表转换二叉搜索树][分治][快慢指针][中序遍历]
[问题描述][中等] [解答思路] 1. 分治 快慢指针 复杂度 class Solution {public TreeNode sortedListToBST(ListNode head) {ret ...
- laravel数组转换为字符串_LeetCode刷题实战108:将有序数组转换为二叉搜索树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- [leetcode-108,109] 将有序数组转换为二叉搜索树
109. 有序链表转换二叉搜索树 Given a singly linked list where elements are sorted in ascending order, convert it ...
- 【数据结构和算法笔记】用c和c++分别实现二叉搜索树
目录 二叉排序树(二叉搜索树)定义: 二叉排序树的性质: 二叉排序树的操作: c语言实现二叉排序树: C++实现二叉排序树: 二叉排序树(二叉搜索树)定义: 二叉排序树的性质: (1)二叉排序树 ...
- leetcode刷题记录--数据结构;深度优先搜索算法;二叉树;平衡树;1020. 飞地的数量;1669. 合并两个链表;108. 将有序数组转换为二叉搜索树
1020. 飞地的数量 难度中等131 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格.1 表示一个陆地单元格. 一次 移动 是指从一个陆地单元格走到另一个相邻(上 ...
- LeetCode(109):有序链表转换二叉搜索树
Medium! 题目描述: 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: ...
- [Leetcode][第108题][JAVA][将有序数组转换为二叉搜索树][二分法][递归]
[问题描述][简单] 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树.本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1.示例:给定有序数组: [- ...
最新文章
- 聊一聊跨域,Vue向Django请求数据的一些问题
- wifi linux 驱动分析,Linux 下wifi 驱动开发(二)—— WiFi模块浅析
- 从HTML5移动应用现状谈发展趋势
- Y分钟学clojure
- Spring 自动装配 ‘byType’
- 计算机主机组成实验,计算机组成原理实验-运算器组成实验报告
- C#获取文件夹及文件的大小与占用空间的方法
- 黄聪:Discuz X2.0 SEO:论坛面包屑导航伪静态 去掉面包屑导航forum.php(转)
- Orchard是如何工作的?
- layui按条件开启关闭编辑列
- 简单的路由封装ppp
- fisco bcos DagTransferUser.java 源码解析阅读注释
- 现代操作系统(原书第四版)课后题答案 —— 第一章 引论
- Demo3D详解-----附下载地址
- vue + element插件Popover弹出框
- 腾讯云数据迁移工具解决方案:华为云迁移到腾讯云
- 微信企业号开发-如何建立连接
- C语言32位系统下基本类型数据所占字节数
- 怎么把虚拟机的计算机弄到桌面,Win10自带的虚拟机功能,教你这样设置,免费让一台电脑变3台!...
- 需求分析师如何提高核心竞争力
热门文章
- 剑指offer之中判断二叉树是不是对称二叉树(递归和非递归实现)
- 其实python面向对象3分钟就可以入门(14)
- sql CHECK ,UNIQUE 约束(mysql)
- pythonweb服务器怎么让别人访问_Django配置让其他电脑访问网站
- php 点对点,浅析点对点(End-to-End)的场景文字识别
- hutol json null值没了_JSON数据处理框架Jackson精解第一篇-序列化与反序列化核心用法...
- 用柠檬来发电真的可行吗?
- 【汇总推荐】深度学习、自然语言处理干货笔记汇总
- 绘制矩形php,PHP_php绘制一个矩形的方法,本文实例讲述了php绘制一个矩 - phpStudy...
- ajax 偶尔302,关于Ajax 中response出现302的一点见解