Java 求解二叉搜索树的最小绝对差

Posted 南淮北安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解二叉搜索树的最小绝对差相关的知识,希望对你有一定的参考价值。

一、题目

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

二、题解

该题类似:验证二叉搜索树

已知是一颗二叉搜索树,所以最小值一定出现在相邻的节点

即对这棵树中序遍历即可,遍历过程中找出相邻结点的最小差值

三、递归法

中序遍历,求相邻结点的最小差值,所以需要记录前驱节点

class Solution 
    //记录遍历过程中的最小差值
    int min = Integer.MAX_VALUE;
    //记录遍历过程中的前驱节点
    TreeNode pre;

    public int getMinimumDifference(TreeNode root) 
        if (root == null) 
            return min;
        
        getMinimumDifference(root.left);
        //遍历过程迭代更新最小差值
        if (pre != null && (root.val - pre.val) < min) 
            min = root.val - pre.val;
        
        pre = root;
        getMinimumDifference(root.right);
        return min;
    

四、迭代法

中序遍历,借助前驱

class Solution 
    public int getMinimumDifference(TreeNode root) 
        Deque<TreeNode> deque = new LinkedList<>();
        int min = Integer.MAX_VALUE;
        TreeNode pre = null;
        while (root != null || !deque.isEmpty()) 
            if (root != null) 
                deque.push(root);
                root = root.left;
             else 
                root = deque.pop();
                if (pre != null && (root.val - pre.val) < min) 
                    min = root.val - pre.val;
                
                pre = root;
                root = root.right;
            
        
        return min;
    

五、总结

该题,本质还是考察二叉搜索树的性质,及二叉树的中序遍历

以上是关于Java 求解二叉搜索树的最小绝对差的主要内容,如果未能解决你的问题,请参考以下文章

二叉树:搜索树的最小绝对差

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

二叉树刷题篇(11) 二叉搜索树的最小绝对差与众数

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

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

⭐算法入门⭐《二叉树 - 二叉搜索树》简单07 —— LeetCode 530. 二叉搜索树的最小绝对差