二叉搜索树的最小绝对差
题目描述:
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
相关介绍
二叉搜索树,为满足 所有节点的左树节点值都小于自身的值,右树节点值都大于自身的值的二叉树。
思路
算整树的任意不同节点的最小差值,考虑二叉搜索树的特性。
java代码:
public int getMinimumDifference(TreeNode root) {
//递归出口,所有节点的值处在2-10000之间
if(root==null){
return 10000;
}
if(root.left==null&&root.right==null){
return 10000;
}
//二叉搜索树最接近的两值为:
// 根节点与左子树的最右节点 根节点与右子树的最左节点 小的那个
if(root.left==null&&root.right!=null){
return Math.min(Math.abs(root.val-getLeftest(root.right)),getMinimumDifference(root.right));
}
if(root.right==null&&root.left!=null){
return Math.min(Math.abs(root.val-getRightest(root.left)),getMinimumDifference(root.left));
}
return Math.min(Math.min(Math.abs(root.val-getLeftest(root.right)),getMinimumDifference(root.right)),Math.min(Math.abs(root.val-getRightest(root.left)),getMinimumDifference(root.left)));
}
//得到树的最右节点
public int getRightest(TreeNode root){
if(root.right==null){
return root.val;
}
return getRightest(root.right);
}
//得到树的最左节点
public int getLeftest(TreeNode root){
if(root.left==null){
return root.val;
}
return getLeftest(root.left);
}
python代码:
def getMinimumDifference(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 100000
if (not root.left) and (not root.right):
return 100000
if root.left and not root.right:
return min(abs(root.val-self.getRightest(root.left)),self.getMinimumDifference(root.left))
if root.right and not root.left:
return min(abs(root.val-self.getLeftest(root.right)),self.getMinimumDifference(root.right))
return min( min(abs(root.val-self.getRightest(root.left)),self.getMinimumDifference(root.left)),min(abs(root.val-self.getLeftest(root.right)),self.getMinimumDifference(root.right)))
def getLeftest(self,root):
if not root.left:
return root.val
return self.getLeftest(root.left)
def getRightest(self,root):
if not root.right:
return root.val
return self.getRightest(root.right)
运行截图: