zoukankan      html  css  js  c++  java
  • 【Leetcode】530.二叉搜索树的最小绝对差

    题目链接

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

    题目描述

    解题思路

    1.利用中序遍历把树转为有序数组,然后在数组上求两个相邻数字的最小值。

    2.同样采用中序遍历,可以直接在递归遍历的过程中记录相邻数字的最小值。

    3.因为题目给的树是二叉排序树,所以中序遍历的结果一定是一个有序数组,所以两个数的差的最小值一定出现在中序遍历中相邻的两个节点,所以可以借鉴链表记录前驱节点的方式记录中序遍历中的当前节点以及前驱节点,两者作差比较即可。

    AC代码

    解法一

    class Solution {
        LinkedList<Integer> ans = new LinkedList<>();
        void InOrderTraversal(TreeNode root){
            if(root != null){
                InOrderTraversal(root.left);
                ans.add(root.val);
                InOrderTraversal(root.right);
            }
        }
        public int getMinimumDifference(TreeNode root) {
            InOrderTraversal(root);
            int minn = 9999999;
            for(int i = ans.size()-1;i > 0; i--){
                if(ans.get(i)-ans.get(i-1) < minn) minn = ans.get(i)-ans.get(i-1);
            }
            return minn;
        }   
    }
    

    解法二

    class Solution {
        LinkedList<Integer> ans = new LinkedList<>();
        int minn = 9999999;
        int temp = 0;
        void InOrderTraversal(TreeNode root){
            if(root != null){
                InOrderTraversal(root.left);
                temp++;
                ans.add(root.val);
                if(temp>=2){
                    if(ans.get(temp-1)-ans.get(temp-2)<minn) minn = ans.get(temp-1)-ans.get(temp-2);
                }
                InOrderTraversal(root.right);
            }
        }
        public int getMinimumDifference(TreeNode root) {
            InOrderTraversal(root);
            return minn;
        }   
    }
    

    解法三

    class Solution {
    
        private int minn = Integer.MAX_VALUE;
        TreeNode pre = null;
        void InOrderTravel(TreeNode root){
            if(root == null) return;
            InOrderTravel(root.left);
            if(pre != null){
                if(root.val - pre.val < minn) minn = root.val-pre.val;
            }
            pre = root;
            InOrderTravel(root.right);
        }
    
        public int getMinimumDifference(TreeNode root) {
            InOrderTravel(root);
            return minn;
        }
    }
    
  • 相关阅读:
    使用python三方库xlrd解析excel数据
    testng之listener
    使用Junit实现批量运行
    gojs绘流程图
    sqlserver
    Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns
    myBatis oracle 与mysql自增问题
    Oracle总结
    Oracle 树操作(select…start with…connect by…prior)
    Oracle 获取当前日期及日期格式
  • 原文地址:https://www.cnblogs.com/XDU-Lakers/p/13800866.html
Copyright © 2011-2022 走看看