注意 看到二叉搜索树首先要想到中序遍历,中序遍历二叉搜索树会得到有序的序列,本题可以转化为寻找有序数组的最小差值
迭代
public int getMinimumDifference(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
TreeNode pre = null;
int min = Integer.MAX_VALUE;
while(root!=null || !stack.isEmpty()){
while(root!=null){
stack.push(root);
root = root.left;
}
TreeNode x = stack.pop();
if(pre!=null){
int num = x.val-pre.val;
min = Math.min(min,Math.abs(num));
}
pre = x;
root = x.right;
}
return min;
}
递归
TreeNode pre = null;
int min = Integer.MAX_VALUE;
public int getMinimumDifference(TreeNode root) {
recur(root);
return min;
}
public void recur(TreeNode root){
if(root==null) return;
recur(root.left);
if(pre!=null){
min = Math.min(min,root.val-pre.val);
}
pre = root;
recur(root.right);
}