当前位置: 首页 > news >正文

★【二叉搜索树】【中序遍历+前后指针】Leetcode 530. 二叉搜索树的最小绝对差

★【二叉搜索树】【中序遍历+前后指针】Leetcode 530. 二叉搜索树的最小绝对差

    • 解法1 笨方法 中序遍历转化为有序数组之后遍历
    • 解法2 记忆一下!!!需要用一个pre节点记录一下cur节点的前一个节点

遇到在二叉搜索树上求什么最值,求差值之类的,都要思考一下二叉搜索树可是有序的,要利用好这一特点。
同时要学会在递归遍历的过程中如何记录前后两个指针

---------------🎈🎈题目链接🎈🎈-------------------
在这里插入图片描述

解法1 笨方法 中序遍历转化为有序数组之后遍历

最大值:Integer.MAX_VALUE
得到ArrayList中的值:arr.get(i)
得到ArrayList的大小:arr.size()

时间复杂度O(N)
空间复杂度O(N)

/*** 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 int getMinimumDifference(TreeNode root) {// 中序遍历转化为有序数组之后遍历List<Integer> arr = new ArrayList<>();helper(root,arr);int min = Integer.MAX_VALUE;for(int i = 0; i < arr.size()-1;i++){int temp = Math.abs(arr.get(i+1)-arr.get(i));if(temp < min){min = temp;}}return min;}public void helper(TreeNode root, List<Integer> arr){if(root==null) return;helper(root.left, arr);arr.add(root.val);helper(root.right, arr);}
}

解法2 记忆一下!!!需要用一个pre节点记录一下cur节点的前一个节点

以上代码是把二叉搜索树转化为有序数组了,其实在二叉搜素树中序遍历的过程中,我们就可以直接计算了。
需要用一个pre节点记录一下cur节点的前一个节点
在这里插入图片描述

时间复杂度O(N)
空间复杂度O(N)

可以背一下背一下

// 采用一个pre节点记录一下cur节点的前一个节点 + 中序遍历【模板题】
class Solution {int result = Integer.MAX_VALUE;TreeNode pre = null;public int getMinimumDifference(TreeNode root) {helper(root);return result;}public void helper(TreeNode root){if(root==null) return;helper(root.left);// 左if(pre!=null){result = Math.min(result,Math.abs(root.val-pre.val));}pre = root;helper(root.right);// 右}
}

相关文章:

  • osi模型,tcp/ip模型(名字由来+各层介绍+中间设备介绍)
  • Mysql索引学习
  • Unity(第十七部)Unity自带的角色控制器
  • 数据结构与算法:堆
  • Carla自动驾驶仿真九:车辆变道路径规划
  • 基于ssm江苏融汇房地产营销策划有限公司的宣传网站
  • 蓝桥杯算法题汇总
  • mysql使用连接池
  • 6、wuzhicms代码审计
  • 【JSON2WEB】07 Amis可视化设计器CRUD增删改查
  • 把简单留给用户,把复杂交给 AI
  • 新形势下第三方支付公司如何盈利
  • 小白学视觉 | 详解遗传算法 GA(Python实现代码)
  • 软件测试测试文档编写
  • 多线程(进阶四:线程安全的集合类)
  • Angularjs之国际化
  • C++11: atomic 头文件
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • golang 发送GET和POST示例
  • Hibernate【inverse和cascade属性】知识要点
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • java小心机(3)| 浅析finalize()
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • MySQL QA
  • Odoo domain写法及运用
  • RxJS: 简单入门
  • 爱情 北京女病人
  • 对JS继承的一点思考
  • 微信小程序设置上一页数据
  • Python 之网络式编程
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • UI设计初学者应该如何入门?
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​力扣解法汇总946-验证栈序列
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #前后端分离# 头条发布系统
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $L^p$ 调和函数恒为零
  • (2)STM32单片机上位机
  • (2.2w字)前端单元测试之Jest详解篇
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (一)为什么要选择C++
  • (译)计算距离、方位和更多经纬度之间的点
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .Net的C#语言取月份数值对应的MonthName值