给你一个二叉搜索树的根节点
root
,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。
题解:使用中序遍历来实现
代码如下:
public int getMinimumDifference(TreeNode root) {
int pre = -1;
int res = Integer.MAX_VALUE;
Stack<TreeNode> s = new Stack<>();
while(root != null || !s.isEmpty()){
while(root != null){
s.push(root);
root = root.left;
}
TreeNode node = s.pop();
if(pre == -1){
pre = node.val;
}
else{
res = Math.min(res, Math.abs(node.val - pre));
pre = node.val;
}
root = node.right;
}
return res;
}
注意:对于根节点,根据二叉搜索数的性质,根节点和左子树中的右子树的差值是更小的,正好中序遍历满足该条件差值=4-3,而不是4-2
4
2 7
1 3