530. Minimum Absolute Difference in BST
题目大意
Given the root of a Binary Search Tree (BST), return the minimum absolute difference between the values of any two different nodes in the tree.
中文释义
给定一个二叉搜索树(BST)的根节点,返回树中任意两个不同节点的值之间的最小绝对差。
示例
示例 1:
输入: root
= [4,2,6,1,3]
输出: 1
示例 2:
输入: root
= [1,0,48,null,null,12,49]
输出: 1
限制条件
- 树中节点的数量范围是
[2, 10^4]
。 0 <= Node.val <= 10^5
解题思路
方法
该方法通过中序遍历二叉搜索树(BST)来找到任意两个不同节点的值之间的最小绝对差。
-
中序遍历DFS:
- 实现
in_dfs
函数递归地进行中序遍历。 - 中序遍历BST将以升序的方式访问所有节点。
- 实现
-
计算最小绝对差:
- 在遍历过程中,比较当前节点的值与上一个节点的值,计算它们的差的绝对值。
- 更新最小绝对差
min_dis
。
-
维护上一个节点的值:
- 使用变量
number
来存储上一个访问的节点的值。
- 使用变量
-
返回结果:
- 在
getMinimumDifference
函数中,初始化min_dis
和number
,然后调用in_dfs
函数开始递归,最后返回min_dis
。
- 在
代码
class Solution {
public:
void in_dfs(TreeNode* root, int &number, int &min_dis) {
if (root) {
in_dfs(root -> left, number, min_dis);
if (number != INT_MAX) {
min_dis = min(min_dis, abs(number - root -> val));
}
number = root -> val;
in_dfs(root -> right, number, min_dis);
}
}
int getMinimumDifference(TreeNode* root) {
int min_dis = INT_MAX;
int number = INT_MAX;
in_dfs(root, number, min_dis);
return min_dis;
}
};