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

LeetCode 530. 二叉搜索树的最小绝对差

时间:2023-05-29 18:33:07浏览次数:54  
标签:node TreeNode travel 二叉 530 prev root LeetCode

题目链接:LeetCode 530. 二叉搜索树的最小绝对差

题意:

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

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

解题思路:

递归法1

既然是二叉搜索树,那么中序遍历一定是有序的,因此最小的插值一定出现在相邻的两个结点之间,因此先中序遍历得到所有结点值的数组,然后求数组中相邻的两个数之间差值的最小值。

递归代码:

var vals []int 
func getMinimumDifference(root *TreeNode) int {
    vals = []int{}
    dfs(root)
    res  := math.MaxInt
    for i:=1;i<len(vals);i++{
        if vals[i] - vals[i-1] < res {
            res = vals[i] - vals[i-1]
        }
    }
    return res
}
func dfs(root *TreeNode){
     if root == nil{
        return 
    }
    dfs(root.Left)
    vals = append(vals,root.Val)
    dfs(root.Right)
}

递归法2

中序遍历中,记录最小值

// 中序遍历的同时计算最小值
func getMinimumDifference(root *TreeNode) int {
    // 保留前一个节点的指针
    var prev *TreeNode
    // 定义一个比较大的值
    min := math.MaxInt64
    var travel func(node *TreeNode)
    travel = func(node *TreeNode) {
        if node == nil {
            return 
        }
        travel(node.Left)
        if prev != nil && node.Val - prev.Val < min {
            min = node.Val - prev.Val
        }
        prev = node
        travel(node.Right)
    }
    travel(root)
    return min
}

标签:node,TreeNode,travel,二叉,530,prev,root,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17441322.html

相关文章

  • LeetCode 98. 验证二叉搜索树
    题目链接:LeetCode98.验证二叉搜索树题意:给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。有效二叉搜索树定义如下:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解题思路......
  • 二叉排序链表C语言代码实现
    #include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedefstructBSTNode{intdata;structBSTNode*lchild;structBSTNode*rchild;}BSTNode,*BSTree;BSTNode*InitNode(intdata){BSTNode*node=(BSTNode......
  • LeetCode 700. 二叉搜索树中的搜索
    题目链接:LeetCode700.二叉搜索树中的搜索题意:给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在BST中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null 。解题思路:递归法递归遍历二叉树,寻找与val相等的节点,找到即返回......
  • leetcode1657vector的初始化和比较
    满足相似的条件:1.长度一样2.组成的字母组合相同3.每个组成字母的个数集合相同比较两个vector,直接用==/!=排序vectorsort(迭代器1,迭代器2);初始化vector形式:vector<类型>name(形式)if(word1.lenth()!=word2.length())returnfalse;//长度不同vector<int>v2(26,0),v1(2......
  • LeetCode 617. 合并二叉树
    题目链接:LeetCode617.合并二叉树题意:给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新......
  • 二叉排序树的三种遍历方式和实现源代码
    二叉排序树(BinarySearchTree)是一种特殊的二叉树,它满足以下性质:对于树中的每个节点,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。这种特性使得对于二叉排序树的遍历具有一定的规律。前序遍历(PreorderTraversal)是一种遍历二叉树的方法。......
  • 代码随想录算法训练营第二十天|654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树
    【参考链接】654.最大二叉树【注意】1.构造二叉树,都需要用前序遍历。2.二叉树的根是数组中的最大元素。3.没必要构造新数组,通过下标控制左右区间。运行效率会高很多。【代码】1#Definitionforabinarytreenode.2#classTreeNode(object):3#def__init......
  • 【LeetCode双向链表】LRU详解,双向链表实战
    LRU缓存请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。voidput(intkey,intvalu......
  • #yyds干货盘点# LeetCode程序员面试金典:填充每个节点的下一个右侧节点指针
    题目:给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:structNode{ intval; Node*left; Node*right; Node*next;}填充它的每个next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将next指针设置为NUL......
  • #yyds干货盘点# LeetCode程序员面试金典:二叉搜索树迭代器
    1.简述:实现一个二叉搜索树迭代器类BSTIterator,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNoderoot)初始化BSTIterator类的一个对象。BST的根节点root会作为构造函数的一部分给出。指针应初始化为一个不存在于BST中的数字,且该数字小于BST中的任何元素。b......