每日力扣-树-二叉搜索树的最小绝对差

100 阅读1分钟

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

解题思路:二叉搜索树的中序遍历是递增的,我们在递归处理中这个节点时做一个取差的行为,pre = -1是用来避免根节点不能直接递归。

class Solution {
public:
    int ans = INT_MAX;
    int getMinimumDifference(TreeNode* root) {
        int pre = -1;
        dfs(root,pre,ans);
        return ans;
    }
    void dfs(TreeNode* root,int &pre,int &ans)
    {
        if(root == nullptr) 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);
    }
};