• 【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;
        }
    }
    
  • 相关阅读:
    我深知黑暗,但心向光明(记毕业后第一次在北京求职)
    CF 1200E HASH模板
    CF580D
    CF1433F
    CF1451 E1交互题
    11.23-11.29 训练计划
    11.22 CF总结 #682
    sql问题:备份集中的数据库备份与现有的 '办公系统' 数据库不同
    内容导出成word
    让超链接无法跳转的方法
  • 原文地址:https://www.cnblogs.com/XDU-Lakers/p/13800866.html
Copyright © 2020-2023  润新知