欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二叉搜索树的最小绝对差(530)

程序员文章站 2022-04-24 16:29:00
...

**题目:**给定一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

示例:
二叉搜索树的最小绝对差(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种基本数据类型:
二叉搜索树的最小绝对差(530)
以上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