找出二叉搜索树(BST)中任意两个节点值的差的最小值。
思路:
知道为什么是easy么,因为它是BST,而不是一般的二叉树甚至是多叉树。
BST有个特点,它的中序遍历一定是升序的。
中序遍历一遍,问题就转换成了升序数组中,两个元素差的最小值。
既然是升序,那么相差最小的肯定是相邻的俩元素。
于是变成相邻两元素差的最小值。
现在不用数组储存,直接在中序遍历过程中求前后两diff值,更新最小的diff.
class Solution {
int pre = -1;
int minDis = 1000000;
public int minDiffInBST(TreeNode root) {
inOrder(root);
return minDis;
}
void inOrder(TreeNode root) {
if(root == null) return;
inOrder(root.left);
if(pre >= 0) minDis = Math.min(minDis, root.val-pre);
pre = root.val;
inOrder(root.right);
}
}