每日一练:LeeCode-530、二叉搜索树的最小绝对差【二叉搜索树+pre辅助节点+DFS】

本文是力扣LeeCode-530、二叉搜索树的最小绝对差【二叉搜索树+pre辅助节点+DFS】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值

差值是一个正数,其数值等于两值之差的绝对值

示例 1:
在这里插入图片描述

输入:root = [4,2,6,1,3]
输出:1

示例 2:
在这里插入图片描述

输入:root = [1,0,48,null,null,12,49]
输出:1

提示:

  • 树中节点的数目范围是 [2, 10^4]
  • 0 <= Node.val <= 10^5

思路

注意是⼆叉搜索树,是有序的
在⼆叉搜索树上求最值、差值==>⼀个有序数组上求最值,求差值

递归法

由于是二叉搜索树,所以直接中序遍历
其实,这道题把⼆叉搜索树转换成有序数组,然后遍历⼀遍数组,就统计出来最⼩差值了
但是我们其实可以在中序遍历过程中,就可以统计出来
需要⽤⼀个pre辅助节点记录⼀下cur节点的前⼀个节点
在这里插入图片描述

1、确定递归函数,返回值以及参数
由于是直接使用中序遍历,统计结果,故可以直接使用原题函数进行递归操作

	int getMinimumDifference(TreeNode root)

2、确定终⽌条件
函数的返回值要求int类型并且当 root==null 时,要么是叶子结点,要么是只有一个节点的,题目要求节点数是>=2的,所以是遍历到叶子结点时的情况,如果递归函数的返回值是void,遇到叶子结点,直接return即可

	if (root==null)return 0;

3、确定单层递归的逻辑
中序遍历直接写起来为什么需要⽤⼀个pre辅助节点记录⼀下cur节点的前⼀个节点呢?因为二叉搜索树是水平从左往右递增的找任意节点之间的最小绝对差,肯定是相邻的节点

    getMinimumDifference(root.left);	// 左if (pre!=null){						// 中result = Math.min(result,root.val-pre.val);}pre = root;	// 记录前⼀个getMinimumDifference(root.right);	// 右return result;
整体代码
class Solution {TreeNode pre = null;int result = Integer.MAX_VALUE;public int getMinimumDifference(TreeNode root) {if (root==null)return 0;getMinimumDifference(root.left);if (pre!=null){result = Math.min(result,root.val-pre.val);}pre = root;getMinimumDifference(root.right);return result;}
}

最重要的一句话:做二叉树的题目,首先需要确认的是遍历顺序
大佬们有更好的方法,请不吝赐教,谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/472688.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wonderland - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 Wonderland 是小王居住地一家很受欢迎的游乐园。Wonderland目前有 4 种售票方式,分别为一日票(天)、三日票(3 天)&#xff0c;周票( 7 天)和月票( 30 天) 。 每种…

谷歌内部开发AI大语言模型“鹅”;OpenAI CEO 寻求大规模AI芯片全球生产投资

&#x1f989; AI新闻 &#x1f680; 谷歌内部开发AI大语言模型“鹅” 摘要&#xff1a;谷歌正在积极将AI技术融入其产品中&#xff0c;并为提升员工效率而开发了一个名为“鹅”的AI大语言模型。这一模型仅供公司内部团队使用&#xff0c;旨在辅助新产品的开发。据悉&#xf…

【优化数学模型】2. 动态规划DP方法的求解思路

【优化数学模型】2. 动态规划DP方法的求解思路 一、动态规划1. 概述2. 最优性原理3. 最优子结构特性 二、示例&#xff1a;0-1背包问题1. 问题描述2. 使用自顶向下的方法3. 使用自下而上的方法 一、动态规划 1. 概述 多阶段决策问题&#xff0c;就是要在允许的决策范围内&…

电子元器件基础5---二极管

除了电阻、电容和电感等线性元器件之外,还有二极管、三极管这些常用的非线性器件广泛应用于日常生活中。那么今天我们来介绍以下二极管这一常用的电子元器件。 一、二极管概念 二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件 。二极管有两个电极,正极,又叫阳极;负…

沐编程APP免费下载|获取免费项目以及技术教程

软件介绍 沐编程专注于分享IT编程相关知识的网站&#xff0c;主要分享毕业设计案例代码&#xff0c;课程设计案例代码&#xff0c;实用功能代码&#xff0c;bug解决方案&#xff0c;编程工具推荐以及编程课程分享等 下载方式 蓝奏云下载&#xff1a;https://wfr.lanzout.com…

C语言学习day15:数组强化训练

题目一&#xff1a; 称体重&#xff1a;分别给10个值&#xff0c;来获得最大值 思路&#xff1a; 定义数组&#xff0c;给数组内赋10个值第一个下标的值与第二个下标的值进行比较定义max&#xff0c;将比较得来的较大的值赋值给max一直比较直到比较到最后一个下标&#xff0…

回溯题中借助哈希法来巧妙去重的操作

今天总结一下回溯法以来做过的这些题&#xff0c;我又发现一个困扰了我的问题&#xff0c;就是在491. 非递减子序列、46. 全排列、47. 全排列 II中都有涉及到用哈希法&#xff0c;去记录曾经用过的元素&#xff0c;下面来总结一下吧。 首先得知道&#xff0c;为什么会用到哈希法…

BulingBuling - 《研究巴菲特》 [ Buffettology ]

研究巴菲特 使沃伦-巴菲特成为世界上最著名的投资者的那些以前未曾解释过的技术 作者&#xff1a;玛丽-巴菲特 Buffettology The Previously Unexplained Techniques That Have Made Warren Buffett The Worlds Most Famous Investor By Mary Buffett 内容提要 《Buffetto…

机器学习中7种常用的线性降维技术总结

上篇文章中我们主要总结了非线性的降维技术&#xff0c;本文我们来总结一下常见的线性降维技术。 1、Principal Component Analysis (PCA) Principal Component Analysis (PCA) 是一种常用的降维技术&#xff0c;用于将高维数据集转换为低维表示&#xff0c;同时保留数据集的…

如何打开Windows 10及更低版本系统的控制面板?这里提供详细步骤

Windows中的控制面板是一组小程序,有点像小程序,可以用来配置操作系统的各个方面。 例如,“控制面板”中的一个小程序允许你配置鼠标指针的大小(以及其他内容),而另一个则允许你调整所有与声音相关的设置。 其他小程序可用于更改网络设置、设置存储空间、管理显示设置等…

什么是位段?位段的作用是什么?他与结构体有什么关系?

目录 1.什么是位段&#xff1f; 2.位段的内存分配 判断当前机器位段的内存分配形式 1.什么是位段&#xff1f; 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1.位段的成员必须是 int、unsigned int 或signed int或char 。 2.位段的成员名后边有一个冒号和…

基于RTOS的嵌入式软件开发与可靠性提升

&#xff08;本文为简单介绍&#xff0c;观点来自网络&#xff09; 随着科技的快速发展&#xff0c;嵌入式系统无所不在&#xff0c;从你的智能手表到汽车的自动驾驶系统&#xff0c;它们都在静静地改变我们的世界。而在这一切的背后&#xff0c;实时操作系统&#xff08;RTOS&…