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

二叉搜索树的最小绝对差

题目

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

示例:

输入:

   1
    
     3
    /
   2

输出:
1

解释:
最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
 
提示:
树中至少有 2 个节点。
本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/ 相同

思路

很久没做二叉树的题目了,借此题目来复习一下搜索二叉树的一些性质。
这道题目要求任意结点之间最小绝对值,那么如果是一个升序的数组的话,其最小绝对值肯定是在相邻之间的位置
所以我们采用中序遍历的办法,并且用一个值来记录当前最小绝对值,不断进行更新。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void dfs(TreeNode* root,int &pre,int& ans)
    {
        if(root == NULL) return;
        dfs(root->left,pre,ans);
        if(pre == -1) 
        {
            pre = root->val;
        }
        else
        {
            ans = min(ans,root->val - pre);
            pre = root->val;
        }
        dfs(root->right,pre,ans);
    }

    int getMinimumDifference(TreeNode* root) {
        //利用中序遍历,按升序排列的数组 差值绝对值最小的点肯定是相邻的

        int ans = INT_MAX;
        int pre =-1;
        dfs(root,pre,ans);
        return ans;
   

    }
};

链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst

原文地址:https://www.cnblogs.com/jiashun/p/LeetCode_530.html