1.题目:
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
输入:
输入:root = [4,2,6,1,3]
输出:1
原题链接:链接
2.解题思路:考察任意两个元素之差的最小值,直观的思路是对二叉树组成的序列进行排序后,再计算相邻元素之差的最小值即为结果。
而这有一个很重要的结论:二叉树中序遍历得到的结果是有序的。
既可以通过把每个元素的值都保存在一个数组里,再进行比较;更好的方法是使用一个变量保存前驱结点的值,这样就可以边遍历边更新。
3.代码(Java版):
class Solution {
private int pre;
private int res;
public int minDiffInBST(TreeNode root) {
pre = -1;//每个结点的值都是大于0的
res = Integer.MAX_VALUE;
dfs(root);
return res;
}
public void dfs(TreeNode root)
{
if (root==null)
{
return;
}
dfs(root.left);
if (pre == -1)//说明前一次的值还未被更新
{
pre = root.val;
}
else
{
res = Math.min(res, root.val - pre);
pre = root.val;
}
dfs(root.right);
}
}