题目:530. 二叉搜索树的最小绝对差
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
输入:
1
\
3
/
2
输出:
1
解释:
- 最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
提示:
- 树中至少有 2 个节点。
- 本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/ 相同
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
基本思想:中序遍历
- 二叉搜索树的中序遍历是单调递增的,肯定相邻的两个数的绝对差最小
/**
* 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:
int getMinimumDifference(TreeNode* root) {
int res = INT_MAX, pre;
bool flag = false;
inorder(root, pre, res, flag);
return res;
}
void inorder(TreeNode* root, int &pre, int &res, bool &flag){
if(root){
inorder(root->left, pre, res, flag);
if(flag){
res = min(res, abs(pre - root->val));
pre = root->val;
}
else{
pre = root->val;
flag = true;
}
inorder(root->right, pre, res, flag);
}
}
};
说明:本题中说明了所有的节点是非负值,所以程序中可以不定义flag,将pre的初始值置为一个负数即可。