给你一个二叉搜索树的根节点 root
,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int getMinimumDifference(TreeNode root) {
List<Integer> res = new ArrayList<>();
orderTree(root,res);
int t= -1;
//两次for循环,确保所有节点都进行差值比较
for (int i = 0; i <=res.size()-1 ; i++) {
if (res.get(i)==null){
continue;
}
for (int j = i+1; j <res.size() ; j++) {
if (res.get(j)==null){
continue;
}
int i1= Math.abs(res.get(i) - res.get(j));//取绝对值
if (t== -1){//作一个标识符,可以将第一个差值存储进t中。后续将旧差值与新差值比较
t= i1;
}else {
t = (t < i1) ? t : i1;
}
}
}
return t;
}
private void orderTree(TreeNode root, List<Integer> res) {
if (root==null){
return;
}
orderTree(root.left,res);//循环调用该方法,直至走到树的最后一个左节点。
res.add(root.val);//然后当前节点的值
orderTree(root.right,res);//同样方法遍历当前节点右边的子节点。
}
}