您的位置:首页 > Web前端

LeetCode530. Minimum Absolute Difference in BST

2017-11-27 15:41 555 查看
530.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.

BST 的最小绝对差值。

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).

Note: There are at least two nodes in this BST.

//Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
```

**方法一:**
利用BST的中序遍历是有序的这一性质,一边遍历一边计算差的最小值.
```
int min = Integer.MAX_VALUE;
Integer prev = null;
public int getMinimumDifference(TreeNode root) {
if(root == null) return min;
getMinimumDifference(root.left);
if(prev != null){
min = Math.min(Math.abs(root.val - prev),min);
}
prev = root.val;
getMinimumDifference(root.right);
return min;
}


方法二:

将上面的方法写的更具体,进一步熟悉二叉树的中序遍历的写法.重要,一开始自己不会写。

public int getMinimumDifference2(TreeNode root){
List<Integer> list = new ArrayList<>();
list = select(root);
int min = Integer.MAX_VALUE;
for(int i = 1; i < list.size(); i++){
min = Math.min(Math.abs(list.get(i) - list.get(i-1)), min);
}
return min;

}

//BST的中序遍历

public List<Integer> select(TreeNode root){
List<Integer> list = new ArrayList<>();
if(root == null) return null;
inorder(root,list);
return list;
}

public void inorder(TreeNode root, List<Integer> list){
if(root.left != null){
inorder(root.left, list);
}
list.add(root.val);
if(root.right != null){
inorder(root.right, list);
}
}


方法三:

思考问题,如果不是BST呢,而是普通的二叉树?

下面的方法是针对普通二叉树的,即使不是BST也适用。

int min2 = Integer.MAX_VALUE;
TreeSet<Integer> set = new TreeSet<>();
public int getMinimumDifference3(TreeNode root){
if(root == null) return min2;

if(!set.isEmpty()){
if(set.floor(root.val) != null){
min2 = Math.min(min, root.val-set.floor(root.val));
}
if(set.ceiling(root.val) != null){
min2 = Math.min(min, set.ceiling(root.val)-root.val);
}
}
set.add(root.val);
getMinimumDifference3(root.left);
getMinimumDifference3(root.right);
return min2;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: