zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Spark入门实战系列--1.Spark及其生态圈简介
    理解JavaScript的原型链
    为什么overflow:hidden能达到清除浮动的目的?
    JavaScript中为什么需要!!?
    CSS品控与流程
    CSS高级特效(下)
    CSS高级特效(上)
    CSS变化、过渡与动画
    CSS表单与数据表(下)
    CSS表单与数据表(上)
  • 原文地址:https://www.cnblogs.com/NiBosS/p/12039615.html
Copyright © 2011-2022 走看看