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


    前序遍历+排序. 时间复杂度: O(nlogn) 空间复杂度: O(n)

     1 class Solution {
     2     private int res=Integer.MAX_VALUE;
     3     private ArrayList<Integer> arry=new ArrayList<>();
     4     public int getMinimumDifference(TreeNode root){
     5         dfs(root); //前序遍历树的节点元素
     6         Collections.sort(arry); //排序
     7         for(int i=0;i<arry.size()-1;i++){ //最小绝对差肯定由大小相邻的两个元素产生
     8             int temp=Math.abs(arry.get(i+1)-arry.get(i));
     9             if(temp<res) res=temp;
    10         }
    11         return res;
    12     }
    13     void dfs(TreeNode root){
    14         if(root==null) return;
    15         arry.add(root.val);
    16         dfs(root.left);
    17         dfs(root.right);
    18     }
    19 }

    没看到这是一棵二叉搜索树,中序遍历得到的就是从小到大排列的元素值,得出上一个元素和现有元素做差的绝对值,然后和上一个记录下的最小绝对差比较即可,时间复杂度: O(n),空间复杂度: O(1)

     1 class Solution {
     2     private int pre=Integer.MAX_VALUE; //设定初始值
     3     private int res=Integer.MAX_VALUE; //记录最小绝对差
     4     public int getMinimumDifference(TreeNode root){
     5         dfs(root);
     6         return res;
     7     }
     8     void dfs(TreeNode root){ //中序遍历
     9         if(root==null) return;
    10         dfs(root.left);
    11         res=Math.min(res,Math.abs(pre-root.val));
    12         pre=root.val;
    13         dfs(root.right);
    14     }
    15 }
  • 相关阅读:
    【BP算法】
    【C++问题整理】
    【最大回文长度】
    【连通区域个数】
    Redis的复制(Master/Slave)、主从复制、读写分离 (下)
    Redis的复制(Master/Slave)、主从复制、读写分离
    Redis发布订阅
    Redis事务
    Redis持久化
    Redis配置文件
  • 原文地址:https://www.cnblogs.com/NiBosS/p/12039615.html
Copyright © 2020-2023  润新知