给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
输入:
输出:
1
解释:
最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
提示:
- 树中至少有 2 个节点。
解法
由于是bst,因此使用中序遍历,同时由于需要pre节点(因为差值最小,因此只会发生前后相连的节点,其他的情况是不会最小的),因此需要使用模拟栈的方式的进行中序遍历.
class Solution {
private int min = Integer.MAX_VALUE;
public int getMinimumDifference(TreeNode root) {
int min = Integer.MAX_VALUE;
Stack<TreeNode> stack = new Stack<>();
TreeNode pre = null;
while (null != root || ! stack.isEmpty()) {
while (null != root) {
stack.add(root);
root = root.left;
}
TreeNode tmp = stack.pop();
if(null == pre) {
pre = tmp;
}else {
min = Math.min(min, Math.abs(tmp.val - pre.val));
pre = tmp;
}
root = tmp.right;
}
return min;
}
}