Given a Binary Search Tree (BST) with the root node root
, return the minimum difference between the values of any two different nodes in the tree.
Example :
Input: root = [4,2,6,1,3,null,null] Output: 1 Explanation: Note that root is a TreeNode object, not an array. The given tree [4,2,6,1,3,null,null] is represented by the following diagram: 4 / \ 2 6 / \ 1 3 while the minimum difference in this tree is 1, it occurs between node 1 and node 2, also between node 3 and node 2.
Note:
- The size of the BST will be between 2 and
100
. - The BST is always valid, each node's value is an integer, and each node's value is different.
- This question is the same as 530: https://leetcode.com/problems/minimum-absolute-difference-in-bst/
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int minDiffInBST(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List<Integer> list = new ArrayList<>(); queue.offer(root); while(queue.size() > 0){ int size = queue.size(); for(int i=0; i<size; i++){ TreeNode node = queue.poll(); if(node.left != null){ queue.offer(node.left); } if(node.right != null){ queue.offer(node.right); } list.add(node.val); } } Collections.sort(list); int minDiff = Integer.MAX_VALUE; int prev = list.get(0); for(int i=1; i<list.size(); i++){ int tmpDiff = Math.abs(prev - list.get(i)); if(tmpDiff < minDiff){ minDiff = tmpDiff; } prev = list.get(i); } return minDiff; } }
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int minDiffInBST(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List<Integer> list = new ArrayList<>(); traverseBST(root, list); int minDiff = Integer.MAX_VALUE; int prev = list.get(0); for(int i=1; i<list.size(); i++){ int tmpDiff = Math.abs(prev - list.get(i)); if(tmpDiff < minDiff){ minDiff = tmpDiff; } prev = list.get(i); } return minDiff; } public void traverseBST(TreeNode node, List<Integer> list){ if(node == null){ return; } traverseBST(node.left, list); list.add(node.val); traverseBST(node.right, list); } }
[문제] https://leetcode.com/problems/minimum-distance-between-bst-nodes/