1. 二叉搜索树的最小绝对差问题解析
今天我们来解决LeetCode上第530题——二叉搜索树的最小绝对差。这是一道经典的二叉树遍历问题,也是面试中经常出现的算法题。题目要求我们在一棵二叉搜索树中找到任意两个不同节点值之间的最小绝对差。
1.1 题目理解与示例分析
首先明确题目要求:给定一棵二叉搜索树(BST),返回树中任意两个不同节点值之间的最小绝对差。注意题目特别强调了是二叉搜索树,而不是普通的二叉树。
让我们看题目给出的示例:
code复制输入:root = [4,2,6,1,3]
输出:1
解释:树的结构如下:
code复制 4
/ \
2 6
/ \
1 3
最小绝对差出现在节点1和2之间(2-1=1),以及节点3和4之间(4-3=1)。
1.2 二叉搜索树的特性利用
二叉搜索树有一个非常重要的性质:中序遍历二叉搜索树会得到一个升序排列的节点值序列。这个性质是我们解决本题的关键。
对于上面的示例,中序遍历结果为:[1,2,3,4,6],我们只需要比较相邻两个数的差值,就能找到最小绝对差。这比比较所有可能的节点对要高效得多。
2. 两种解法详细解析
2.1 暴力解法:层序遍历+排序
我们先来看第一种解法,这是一种比较直观但效率不高的方法:
java复制class Solution {
public int getMinimumDifference(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
List<Integer> list = new ArrayList<>();
while(queue.size()>0) {
int size = queue.size();
for(int i=0;i<size;i++) {
TreeNode node = queue.poll();
list.add(node.val);
解锁全文
加入我们的会员,获取最新、最热、最精彩的开发者技术内容