[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 粉丝
推荐阅读
[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...
codecraft赞 32阅读 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...
codecraft赞 28阅读 19.3k评论 3
Java5的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...
codecraft赞 13阅读 21.8k
Java9的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...
codecraft赞 20阅读 15.4k
Java13的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...
codecraft赞 17阅读 11.2k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。