首页 > 其他分享 >二叉树——14.二叉搜索树的最小绝对差

二叉树——14.二叉搜索树的最小绝对差

时间:2024-08-18 10:52:32浏览次数:14  
标签:result 遍历 14 self 二叉 vec traversal root 二叉树

力扣题目链接

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

解题思路总结

  • 中序遍历是一种有效的方法,可以将二叉搜索树节点的值按从小到大的顺序排列。
  • 通过将这些值存入一个有序数组后,只需遍历数组,比较相邻元素的差值,即可找到树中任意两个节点值的最小差值。
  • 代码中的关键是利用了二叉搜索树的特性,使得中序遍历后得到的序列是有序的,从而简化了最小差值的计算。

完整代码如下:

class Solution:
    def __init__(self):
        self.vec = []

    def traversal(self, root):
        if root is None:
            return
        self.traversal(root.left)
        self.vec.append(root.val)  # 将二叉搜索树转换为有序数组
        self.traversal(root.right)

    def getMinimumDifference(self, root):
        self.vec = []
        self.traversal(root)
        if len(self.vec) < 2:
            return 0
        result = float('inf')
        for i in range(1, len(self.vec)):
            # 统计有序数组的最小差值
            result = min(result, self.vec[i] - self.vec[i - 1])
        return result
class Solution:
    def __init__(self):
        self.vec = []
  • Solution类是一个包含解决方案的类。
  • 在类的构造函数__init__中,初始化了一个空列表self.vec,该列表用于存储二叉搜索树节点的值,并且这些值将按照中序遍历的顺序存储,即从小到大排序。
def traversal(self, root):
    if root is None:
        return
    self.traversal(root.left)
    self.vec.append(root.val)  # 将二叉搜索树转换为有序数组
    self.traversal(root.right)
  • traversal方法是一个递归函数,用于对二叉搜索树进行中序遍历。
  • 中序遍历的顺序是先遍历左子树,再访问根节点,最后遍历右子树。在二叉搜索树中,中序遍历的结果是一个升序排列的节点值序列。
  • 如果当前节点root为空(即None),递归终止。
  • self.traversal(root.left)递归遍历左子树。
  • self.vec.append(root.val)将当前节点的值添加到self.vec列表中,这个列表会存储所有节点值的有序序列。
  • self.traversal(root.right)递归遍历右子树。
def getMinimumDifference(self, root):
    self.vec = []
    self.traversal(root)
    if len(self.vec) < 2:
        return 0
    result = float('inf')
    for i in range(1, len(self.vec)):
        # 统计有序数组的最小差值
        result = min(result, self.vec[i] - self.vec[i - 1])
    return result
  • getMinimumDifference方法是解决问题的主函数。
  • 首先,重新初始化self.vec为空列表,以确保在每次调用getMinimumDifferenceself.vec都是空的。
  • 调用self.traversal(root),将二叉搜索树转换为一个有序数组self.vec
  • 如果树中节点数少于2个,即len(self.vec) < 2,则返回0,因为无法计算差值。
  • 初始化result为正无穷大,用于存储当前发现的最小差值。
  • 使用for循环从第2个元素开始遍历有序数组self.vec(从i=1开始),计算相邻两个元素的差值,并更新result为当前最小的差值。
  • 最后,返回最小差值result

标签:result,遍历,14,self,二叉,vec,traversal,root,二叉树
From: https://blog.csdn.net/plutomty/article/details/141296822

相关文章

  • 二叉树进阶之二叉搜索树:一切的根源
    前言:在学完了简单的容器与C++面向对象的三大特性之后,我们首先接触的就是map与set两大容器,但是这两个容器底层实现的原理是什么呢?我们不而知,今天,主要来为学习map与set的底层原理而打好基础,而二叉搜索树,则是一切的开端......一、二叉搜索树的定义与性质1.1、什么是二叉搜索树:......
  • c语言计算二叉树的带权路径长度之和(WPL)
    1.WPL:树中全部叶节点的带权路径之和2.代码中所画的树为:3.求上述WPL:WPL=0*1+1*2+1*3+2*4+2*5=234.主要代码为:intwpl(Node*ROOT,inthigh){ intn=0; if(ROOT!=NULL){ n=ROOT->weight*high; n=n+wpl(ROOT->lchild,high+1); n=n+wpl(ROOT->rchild,high+1); } r......
  • MGMT90140 Management Competencies
    MGMT90140ManagementCompetenciesIntroductionIwouldanalysismyquestionnaireandcontrasttheresultsofmyquestionnairewithothertwoassociatesinordertoclearlyfindwhicharemystrengthsandweaknesses.Indoingso,Ihaveaclearself-awar......
  • D45 2-SAT+二分 UVA1146 Now or later
    视频链接: D402-SATPOJ3683PriestJohn'sBusiestDay-董晓-博客园(cnblogs.com)UVA1146Noworlater-洛谷|计算机科学教育新生态(luogu.com.cn)//2-SAT+二分O(n*n*logt)#include<iostream>#include<cstring>#include<algorithm>#include<vec......
  • 数据结构与算法(六)二叉树
    二叉树是一种数据结构,广泛用于计算机科学和编程中。它具有以下几个重要特征:1.基本定义:①二叉树:每个节点最多有两个子节点,分别称为左子节点和右子节点。②节点:二叉树的基本单位,包含数据以及指向其子节点的指针。③根节点:二叉树的第一个节点,没有父节点。④叶子节点:没有子节点的......
  • 数据结构与算法--二叉排序树
    文章目录回顾提要1.二叉排序树的定义与特性2.二叉排序树的构建与插入3.二叉排序树的查找4.二叉排序树的删除5.二叉排序树的优点小结回顾查找算法:顺序查找、折半查找、索引查找。存储结构:顺序表、链表。优点:算法简单,查找效率高(折半查找)。缺点:查找效率低(顺序查找),需要......
  • arc114
    arc一场比一场难噢噢噢噢a:容易想到对每个数进行质因数分解,然后只要每个数都和y有一个相同的质数即可,这个状压一下就可以了b:首先每个数的出度都是1,所以一个连通块里只有一个环,所以是2^t-1c:挺神仙的。这种题首先要分析函数的性质,发现操作+1的情况是对于每个a_{i}lst==0||l......
  • 代码随想录算法训练营第十七天(一)| 654.最大二叉树 617.合并二叉树
    654.最大二叉树题目:给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。......
  • 代码随想录算法训练营第十七天(二)| 700.二叉搜索树中的搜索 98.验证二叉搜索树
    700.二叉搜索树中的搜索题目:给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在BST中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null 。示例1:输入:root=[4,2,7,1,3],val=2输出:[2,1,3]示例2:输入:roo......
  • [20240814]oracle 21c NLS_DATE_FORMAT设置问题(整理版本1).txt
    [20240814]oracle21cNLS_DATE_FORMAT设置问题(整理版本1).txt--//朋友遇到的问题,请求远程协助解决问题:--//执行sqlplus出现如下错误:SQL*Plus:Release21.0.0.0.0-ProductiononSatAug1011:38:062024Version21.3.0.0.0Copyright(c)1982,2021,Oracle. Allrightsr......