二叉搜索树的最小绝对差(530)
**题目:**给定一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
思路:
一、题目给定一棵BST,故对其进行中序遍历即可得到一个升序序列,利用BST的特性,进行遍历计算即可。需要一个整数类型 res 记录最小绝对差,同时需要 pre 来记录前移结点值进行数学运算。
二、中序遍历流程中
1.首先判断结点root == null 之间的关系,若为空,则直接返回。
2.进而进行中序遍历,即一直寻找结点的左宝宝,直到找到最左边的宝宝后开始进行数学运算,即进入if作出判断。
3.令pre = root,同时进入右宝宝进行判断和运算。
Code-递归
class Solution {
int res = Integer.MAX_VALUE; //先令其为最大值,而后有小者,直接进行替换即可。(为保险起见)
TreeNode pre = null;
public int getMinDifference(TreeNode root) {
if (root == null) {
return 0;
}
mid(root);
return res;
}
public void mid(TreeNode root) {
if (root == null) {
return;
}
mid(root.left);
if (pre != null) {
res = Matn.min(res, root.val - pre.val); //计算前后两节点差值并择出最小值。
}
pre = root;
mid(root.right);
}
}
PS:
1.上文 Code 中,有一 int res = Integer.MAX_VALUE;其含义涉及到数据类型,以下进行展开,以下为java中的8种基本数据类型:
以上6种为整数型(int、short、long、byte)和浮点型(float、double),还有字符型(char)和表示真值类型(boolean)。补充:String属于Java中的字符串类型,属于引用类型,不属于基本类型。
int res = Integer.MAX_VALUE表示int数据类型的最大取值数。
int res = Integer.MIN_VALUE表示int数据类型的最小取值数。
其它数据类型含义同上。
2 . 对前文进行补充:
Integer.MAX_VALUE + 1 = Integer.MIN_VALUE
因为Integer.MAX_VALUE的二进制是0111 1111 1111 1111 1111 1111 1111 1111
同时Integer.MIN_VALUE的二进制是 1000 0000 0000 0000 0000 0000 0000 0000
故0111 1111 1111 1111 1111 1111 1111 1111 + 1 = 1000 0000 0000 0000 0000 0000 0000 0000