题目:
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
详见:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/
思路:
中序排列
这道题的思路很简单,我们可以直接中序遍历,然后用ArrayList数组存储起来,再对数组求得最小差值。
当然,这道题有个隐藏条件可以不用这么麻烦:我们要知道二叉搜索树的特点:二叉搜索树中序遍历得到的值序列是递增有序的。这个这个就明确多了,我们可以在遍历的过程中就求得最小差值:
就是用一个全局变量保存前一个值pre和最小差值min,在遍历时判断pre和now值的差值是不是新的最小差值即可。
代码:
static int pre;
static int min;
public static int minDiffInBST(TreeNode root) {
min = Integer.MAX_VALUE;
pre = -1;
dfs(root);
return min;
}
public static void dfs(TreeNode root){
if(root == null){
return ;
}
//中序遍历先遍历左子树然后是根节点最后是右子树
dfs(root.left);
if(pre == -1){
pre = root.val;
}
else{
min = Math.min(min,root.val - pre);
pre = root.val;
}
dfs(root.right);
}