530. Minimum Absolute Difference in BST

本文介绍了一种求解二叉搜索树中任意两节点间最小绝对差的方法,通过递归中序遍历的方式找到相邻节点之间的最小差值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Minimum Absolute Difference in BST

题目:
Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes.

Example:

Input:

   1
    \
     3
    /
   2

Output:
1

Explanation:
The minimum absolute difference is 1, which is the difference between 2 and 1 (or between 2 and 3).
Note: There are at least two nodes in this BST.
代码:

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
    void inorderTraverse(TreeNode* root, int& val, int& min_dif) {
        if (root->left != NULL) 
            inorderTraverse(root->left, val, min_dif);
        if (val >= 0) 
            min_dif = min(min_dif, root->val - val);
        val = root->val;
        if (root->right != NULL) 
            inorderTraverse(root->right, val, min_dif);
    }
    int getMinimumDifference(TreeNode* root) {
        auto min_dif = INT_MAX, val = -1;
        inorderTraverse(root, val, min_dif);
        return min_dif;
    }
};
解题思路:
  • 采用递归中序遍历的思路,由于是个二叉搜索树,任意两点间差值的最小值肯定是从相邻结点间的差值中选一个;
  • 令val = -1 并且设置判别条件 val >= 0 避免了叶子结点与不存在的下一层结点做差,即val - (-1),此处的-1为val的初始值;
  • 每次比较min的值与当前两个结点的差值大小,选择较小的哪一个值,赋给min;
  • 返回min。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值