Given a binary search treewith non-negative values, find the minimum absolute difference between valuesof any two nodes.
谷歌翻译:给定具有非负值的二叉搜索树,找到任意两个节点的值之间的最小绝对差。
首先说一下二叉搜索树,就是二叉排序树。二叉排序树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉排序树的存储结构。中序遍历二叉排序树可得到一个关键字的有序序列,一个无序序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。每次插入的新的结点都是二叉排序树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指针,由空变为非空即可。搜索,插入,删除的复杂度等于树高,O(log(n)).
每次看到树这一张用递归都头疼,一些简单的还好理解,难得就实在写不出来了。这题我是直接将它遍历,然后再求差值。虽然通过测试了,但是我觉得这个比较low。等大神求更好的吧,代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
List<Integer> ls=new ArrayList();
public int getMinimumDifference(TreeNoderoot) {
//先遍历,再放入到集合中排序
visit(root);
Collections.sort(ls);
int a=Integer.MAX_VALUE;
for(int i=1;i<ls.size();i++){
if(ls.get(i)-ls.get(i-1)<a)
a=ls.get(i)-ls.get(i-1);
}
return a;
}
public void visit(TreeNode root){
if(root!=null){
ls.add(root.val);
visit(root.left);
visit(root.right);
}
}
}