530. 二叉搜索树的最小绝对差
题目描述
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
输入:
1
\
3
/
2
输出:
1
解释:
最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
提示:
- 树中至少有 2 个节点。
- 本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/ 相同
代码实现
class Solution {
public int getMinimumDifference(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
int preNodeVal = -1;
int min = Integer.MAX_VALUE;
while (!stack.isEmpty() || node != null){
if (node != null){
stack.push(node);
node = node.left;
}else {
TreeNode topNode = stack.pop();
if (preNodeVal != -1){
int rel = Math.abs(topNode.val - preNodeVal);
min = min < rel?min:rel;
}
preNodeVal = topNode.val;
node = topNode.right;
}
}
return min;
}
}
解题思路
- 二叉搜索树中序遍历得到从小到大排列的元素值
- 得出上一个元素和现有元素做差的绝对值
- 然后和上一个记录下的最小绝对差比较即可
时间复杂度: O(n),空间复杂度: O(1)