[LintCode] Minimum Absolute Difference in BST

Problem

Minimum Absolute Difference in BST
Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes.

Example

Input:


   1
    \
     3
    /
   2

Output:
1

Explanation:
The minimum absolute difference is 1, which is the difference between 2 and 1 (or between 2 and 3).

Solution

public class Solution {
    /**
     * @param root: the root
     * @return: the minimum absolute difference between values of any two nodes
     */
    private final int diff = Integer.MAX_VALUE;
    public int getMinimumDifference(TreeNode root) {
        // take root for example, the min diff should be the diff of 
        // 1. `root` and `root.left's rightmost child`
        // 2. `root` and `root.right's leftmost child`
        if (root == null) return diff;
        
        int res = Integer.MAX_VALUE, leftmost = -1, rightmost = -1;
        if (root.left != null) {
            rightmost = getRightMost(root.left);
        }
        if (root.right != null) {
            leftmost = getLeftMost(root.right);   
        }
        if (leftmost != -1) {
            res = Math.min(res, Math.abs(root.val - leftmost));
        }
        if (rightmost != -1) {
            res = Math.min(res, Math.abs(root.val - rightmost));
        }
        res = Math.min(res, getMinimumDifference(root.left));
        res = Math.min(res, getMinimumDifference(root.right));
        return res;
    }
    public int getLeftMost(TreeNode node) {
        while (node.left != null) node = node.left;
        return node.val;
    }
    public int getRightMost(TreeNode node) {
        while (node.right != null) node = node.right;
        return node.val;
    }
}


Road to Glory
對酒當歌,人生幾何? 譬如朝露,去日苦多。
161 声望
53 粉丝
0 条评论
推荐阅读
[LeetCode] 958. Check Completeness of a Binary Tree
Definition of a complete binary tree from Wikipedia:In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possibl...

linspiration阅读 1.9k

Java8的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft32阅读 27.5k评论 1

一文彻底搞懂加密、数字签名和数字证书!
微信搜索🔍「编程指北」,关注这个写干货的程序员,回复「资源」,即可获取后台开发学习路线和书籍来源:个人CS学习网站:[链接]前言这本是 2020 年一个平平无奇的周末,小北在家里刷着 B 站,看着喜欢的 up 主视...

编程指北71阅读 33.7k评论 20

Java11的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft28阅读 19.3k评论 3

Java5的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft13阅读 21.8k

Java9的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft20阅读 15.4k

Java13的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft17阅读 11.2k

161 声望
53 粉丝
宣传栏