二叉搜索树的最小绝对差
题目
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
输入:
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