leetcode刷题日志-108/1382将有序数组转换为二叉搜索树/将二叉搜索树变平衡

本文主要是介绍leetcode刷题日志-108/1382将有序数组转换为二叉搜索树/将二叉搜索树变平衡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由于这两道题思路极其类似,在此统一记录:

108题.将有序数组转换为平衡二叉搜索树
在这里插入图片描述
思路:给定的数组已经升序排列,而二叉搜索树中序遍历的结果就是升序,但是仅凭中序遍历不能确定一颗二叉树,但是题目只是说将升序序列转换为平衡二叉搜索树,且答案不唯一,所以不要求确定,如何平衡呢?我们尽量保证左右子树一样多的节点不就可以吗?那么我们就能通过每次取数组最中间的元素作为二叉树节点最终就能构建整个平衡二叉搜索树。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode sortedArrayToBST(int[] nums) {return dfs(nums,0,nums.length-1);}public TreeNode dfs(int[] nums, int lo, int hi){if(lo > hi) {return null;}int mid = lo + (hi - lo) / 2;//计算中间节点TreeNode root = new TreeNode(nums[mid]);root.left = dfs(nums,lo,mid - 1);//在数组左半边构建左子树root.right = dfs(nums,mid + 1,hi);//在数组右半边构建右子树return root;}}

在这里插入图片描述
接下来看1382题,解法基本一样,不过多了一个步骤而已
1382.将二叉搜索树变平衡
在这里插入图片描述
思路:这里我们是有了一颗二叉搜索树,将树变平衡,我们有了二叉搜索树,那么就有了升序序列,有了升序序列,不就跟108题一样了吗?将有序数组转换为平衡二叉搜索树。获取升序序列就使用中序遍历记录即可,后面的操作就是使用升序序列构建二叉平衡树了。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode balanceBST(TreeNode root) {ArrayList<Integer> nums = new ArrayList<>();dfs(root,nums);//中序遍历获取升序序列return BSTDFS(nums,0,nums.size()-1);//使用升序序列构建平衡二叉搜索树}public void dfs(TreeNode root,ArrayList<Integer> nums){if(root == null) {return;}dfs(root.left,nums);nums.add(root.val);dfs(root.right,nums);}public TreeNode BSTDFS(ArrayList<Integer> nums,int lo,int hi) {if(lo > hi) {return null;}int mid = lo + (hi - lo) / 2;TreeNode root = new TreeNode(nums.get(mid));root.left = BSTDFS(nums, lo,mid- 1);root.right = BSTDFS(nums,mid+1,hi);return root;}
}

在这里插入图片描述

总结:解这两道题的关键在于要知道二叉搜索树的中序遍历是有序的!

这篇关于leetcode刷题日志-108/1382将有序数组转换为二叉搜索树/将二叉搜索树变平衡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关