530. 二叉搜索树的最小绝对差(BST)


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

题目

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

在这里插入图片描述
提示:

  • 树中至少有 2 个节点。
  • 本题与 783相同

解题思路

解法一:
该题第一种解法。是我自己想出来的垃圾解法, 就把所有的节点的值放入list,再遍历list,进行相减。定义一个min,每次相减的结果与min进行比较。不断更新min。

解法二:
因为是二叉搜索树,所以我们用中序遍历,这样二叉树的节点值是从小到达排列的。
我们只需要在每次进行中序遍历时,把当前值.val 与前一个元素的.val相减,并且更新min

代码

解法一:

class Solution {
    public int getMinimumDifference(TreeNode root) {
        List<Integer> list =new ArrayList<>();
        findAllRoot(list,root);//现在的list已经存有所有节点的值了
        int min=Integer.MAX_VALUE;
        for(int i=0;i<list.size();i++){ 
            for(int j=i+1;j<list.size();j++){ 
                int num=list.get(i)-list.get(j);
                    if(num<0){
                        num=(-1)*num;
                    }

                    if(num<min){
                        min=num;
                    }
            
                } 
        }
    return min;

    }
    public void findAllRoot(List<Integer> list,TreeNode root){//找到所有节点的值,并加入到list中 
    if(root==null){ 
        return ; 
        } 
        list.add(root.val); 
        findAllRoot(list,root.left);
         findAllRoot(list,root.right);
          }

}

解法二:

class Solution {

     TreeNode pre = null;
    int min = Integer.MAX_VALUE;//这俩变量要定义为成员变量,不然每次递归都会重置他们。

      public int getMinimumDifference(TreeNode root) {
        help(root);
        return min;
    }

    public void help(TreeNode root) {
        if (root == null) {
            return;
        }
        help(root.left);
        //中序遍历
        if (pre != null) {
            int cur = (root.val) - (pre.val);
            if (cur < 0) {
                cur = (-1) * cur;
            }
            if (cur < min) {
                min = cur;
            }
        }
        pre = root;
        help(root.right);

    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录