题目:
给定一个二叉搜索树的根结点 root
, 返回树中任意两节点的差的最小值。
输入: root = [4,2,6,1,3,null,null]
输出: 1
解释:
注意,root是树结点对象(TreeNode object),而不是数组。
给定的树 [4,2,6,1,3,null,null] 可表示为下图:
4
/ \
2 6
/ \
1 3
最小的差值是 1, 它是节点1和节点2的差值, 也是节点3和节点2的差值。
个人思路:
可以用一个列表将每个值存起来,然后进行排序,之后两两求差,找到最小的(适用于二叉树),因为题目是二叉搜索树,中序遍历会将树中节点按数值大小顺序输出。
代码:
/**
* 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) {
if(root==null){
return 0;
}else{
List<Integer> a=new ArrayList();
toArry(root,a);
Collections.sort(a);
int ans = Integer.MAX_VALUE;
for (int i = 0; i <a.size() - 1; ++i)
ans = Math.min(ans,a.get(i+1) - a.get(i));
return ans;
}
}
public void toArry(TreeNode root,List<Integer> i){
if(root!=null){
i.add(root.val);
toArry(root.left,i);
toArry(root.right,i);
}
}
}
个人笔记:
集合类型的排序函数:Collections.sort();