其实就是递归的求解当前节点与它左子树的最大值的差值,与它右子树的最小值的差值之间比较。
class Solution {
public int minDiffInBST(TreeNode root) {
if(root.left==null && root.right==null) return Integer.MAX_VALUE;
int left = Integer.MAX_VALUE,right = Integer.MAX_VALUE;
if(root.left!=null){
int leftmax = maxval(root.left);
left = Math.min(Math.abs(root.val-leftmax),minDiffInBST(root.left));
}
if(root.right!=null){
int rightmin = minval(root.right);
right = Math.min(Math.abs(root.val-rightmin),minDiffInBST(root.right));
}
return Math.min(left,right);
}
public int maxval(TreeNode root){
if(root.right==null) return root.val;
return maxval(root.right);
}
public int minval(TreeNode root){
if(root.left==null) return root.val;
return minval(root.left);
}
}
想了半天也没找出来怎么精简,想用一个递归就解决呢。一提交发现击败100%,是不是就不需要了呢?稀里糊涂。