zoukankan      html  css  js  c++  java
  • LeetCode

    链接

    530. Minimum Absolute Difference in BST

    题意

    给定一个没有负数的二叉搜索树,找出任意两点节点值之差的绝对值的最小值。
    二叉搜索树:对于树中的每个节点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有关键字值大于X的关键字值。——数据结构与算法分析

    思路

    利用二叉搜索树的性质可知,所求值可能出现在以下两处:

    • 根节点左/右子树相邻两个节点之差
    • 根节点左子树最大值和根节点右子树最小值
      那么利用递归,在遍历时记录上一个遍历的节点(pre),然后用当前节点减去pre即可获得相邻节点之差。而且遍历完左子树最后一个节点,进入根节点右子树前,pre刚好为左子树最大值,而此时根节点为右子树最小值,因此可以检测条件2

    代码

    Java:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        int min = Integer.MAX_VALUE;
        int pre = -1;
        
        public int getMinimumDifference(TreeNode root) {
            if (root == null) return min;
            getMinimumDifference(root.left);
            if (pre != -1) {
                min = Math.min(min, root.val - pre);
            }
            pre = root.val;
            getMinimumDifference(root.right);
            return min;
        }
    }
    

    效率

    Your runtime beats 53.59% of java submissions.

    非BST的解法

    代码源自LeetCode讨论区。利用了java的排序树。

    public class Solution {
        TreeSet<Integer> set = new TreeSet<>();
        int min = Integer.MAX_VALUE;
        
        public int getMinimumDifference(TreeNode root) {
            if (root == null) return min;
            
            if (!set.isEmpty()) {
                if (set.floor(root.val) != null) {
                    min = Math.min(min, root.val - set.floor(root.val));
                }
                if (set.ceiling(root.val) != null) {
                    min = Math.min(min, set.ceiling(root.val) - root.val);
                }
            }
            
            set.add(root.val);
            
            getMinimumDifference(root.left);
            getMinimumDifference(root.right);
            
            return min;
        }
    }
    
  • 相关阅读:
    数据结构之 栈的应用 括号匹配
    全排列算法与全组合算法
    数据结构高分笔记 第二章综合应用题
    数据结构之 队列的操作与实现
    [置顶] 数据结构之 队列的操作与实现
    php数据库操作类
    php分页类
    [置顶] 数据结构之 链栈的实现
    MySQL数据库应用 从入门到精通 学习笔记
    Linux服务器上使用curl命令发送报文
  • 原文地址:https://www.cnblogs.com/zyoung/p/6701364.html
Copyright © 2011-2022 走看看