二叉搜索树的最小绝对差
- 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
示例 1:
输入:root = [4,2,6,1,3]
输出:1
解题思路
中序遍历:
- 使用中序遍历访问二叉搜索树的节点,得到一个按升序排列的节点值序列。
计算最小差值:
- 在遍历有序节点值序列时,计算相邻节点值的差,找到最小差值。
Java实现
public class MinDiffInBST {public static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }}private Integer prev;private int minDiff;public int getMinimumDifference(TreeNode root) {prev = null;minDiff = Integer.MAX_VALUE;inorderTraversal(root);return minDiff;}private void inorderTraversal(TreeNode node) {if (node == null) {return;}// 遍历左子树inorderTraversal(node.left);// 处理当前节点if (prev != null) {minDiff = Math.min(minDiff, node.val - prev);}prev = node.val;// 遍历右子树inorderTraversal(node.right);}public static void main(String[] args) {MinDiffInBST minDiffInBST = new MinDiffInBST();// 构建示例二叉搜索树TreeNode root = new TreeNode(4);root.left = new TreeNode(2);root.right = new TreeNode(6);root.left.left = new TreeNode(1);root.left.right = new TreeNode(3);// 计算二叉搜索树中任意两不同节点值之间的最小差值int result = minDiffInBST.getMinimumDifference(root);System.out.println("Minimum difference between any two nodes: " + result); // 输出: 1}
}
时间空间复杂度
- 时间复杂度:O(n),其中 n 是二叉搜索树中的节点数。每个节点仅被访问一次。
- 空间复杂度:O(h),其中 h 是二叉搜索树的高度。递归栈的深度等于树的高度,在最坏情况下(树为一条链)空间复杂度为 O(n)。