LeetCode 530. 二叉搜索树的最小绝对差

//利用二叉搜索树中序遍历得到一个升序序列,可衍生出多种问题,注意举一反三
//1.此题计算任意俩节点的最小差值,根据二叉搜索树的性质,这俩个节点一定是相邻节点,父子关系
//2.定义一个存放最小值得变量,用于返回结果
//3.根据中序遍历的过程,定义一个变量存放上一次遍历的节点,用于和本次遍历的节点相比较
class Solution {
    int minDiff = Integer.MAX_VALUE;
    TreeNode preNode = null;
    public int getMinimumDifference(TreeNode root) {
        inOrderTree(root);
        return minDiff;
    }
    //在中序遍历的过程中,顺便比较
    private void inOrderTree(TreeNode node){
        if(node == null) return;
        inOrderTree(node.left);
        //prenode 不能为不存在的节点,因为是比较差值,这一步我疏忽了,报了NullPointerException异常
        if(preNode != null)
        minDiff = Math.min(minDiff,node.val - preNode.val);
        //注意比较的顺序, 左、中 和 中、右
        preNode = node;
        inOrderTree(node.right);
    }
}

 

posted @ 2020-10-28 00:32  peanut_zh  阅读(87)  评论(0编辑  收藏  举报