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:
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.
方法二:
将上面的方法写的更具体,进一步熟悉二叉树的中序遍历的写法.重要,一开始自己不会写。
方法三:
思考问题,如果不是BST呢,而是普通的二叉树?
下面的方法是针对普通二叉树的,即使不是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; }
相关文章推荐
- LeetCode-530. Minimum Absolute Difference in BST (Java)
- leetcode530. Minimum Absolute Difference in BST
- leetcode 530. Minimum Absolute Difference in BST
- [LeetCode]530. Minimum Absolute Difference in BST
- [LeetCode]530. Minimum Absolute Difference in BST
- LeetCode 530. Minimum Absolute Difference in BST
- 【Leetcode】530. Minimum Absolute Difference in BST
- LeetCode-530. Minimum Absolute Difference in BST
- [LeetCode]530. Minimum Absolute Difference in BST(BST的最小绝对差)
- [Leetcode] 530. Minimum Absolute Difference in BST 解题报告
- leetcode 530. Minimum Absolute Difference in BST
- [leetcode]-530. Minimum Absolute Difference in BST
- Leetcode-530. Minimum Absolute Difference in BST
- LeetCode - 530. Minimum Absolute Difference in BST
- LeetCode | 530. Minimum Absolute Difference in BST
- LeetCode 530. Minimum Absolute Difference in BST (二叉搜索树中最小绝对差)
- LeetCode 530. Minimum Absolute Difference in BST
- [leetcode] 530. Minimum Absolute Difference in BST
- [leetcode: Python]530. Minimum Absolute Difference in BST
- Leetcode530. Minimum Absolute Difference in BST