530. 二叉搜索树的最小绝对差
难度简单
给你一个二叉搜索树的根节点 root
,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
思路
题目需要求在二叉搜索树上任意两节点的差的绝对值的最小值。
注意是二叉搜索树,二叉搜索树可是有序的!
在二叉搜索树上进行中序遍历,获得的其实就是一个有序数组,在有序数组上求最小差值,是不是就很简单了?
package cn.edu.xjtu.carlWay.tree.minAbsoluteDifferenceInBST;
import cn.edu.xjtu.Util.TreeNode.TreeNode;
/**
* 530. 二叉搜索树的最小绝对差
* 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
* <p>
* 差值是一个正数,其数值等于两值之差的绝对值。
* <p>
* https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/
*/
public class Solution {
int result = Integer.MAX_VALUE;
TreeNode pre = null;
/**
* 想象成中序遍历的话就是一个有序数组了
*
* @param root
* @return
*/
public int getMinimumDifference(TreeNode root) {
if (root == null) return 0;
traversal(root);
return result;
}
private void traversal(TreeNode root) {
if (root == null) {
return;
}
// 遍历左子树
traversal(root.left);
// 在中间进行数据处理
if (pre != null) {
result = Math.min(result, root.val - pre.val);
}
pre = root;
// 遍历右子树
traversal(root.right);
}
}