解法一:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
//问题描述:找出二分查找树中结点间的最小距离,这两个结点来自于二分查找树中的任意两个结点
//分析:因为二分查找树的中根遍历是有序的,而最小节点必然来自于这个有序序列的两两之间
//那么可以将中根遍历序列存起来,之后两两比较,也可以直接在中根遍历时就比较
//这里采用将中根序列先存起来的方式
private void recurse(TreeNode root, List<Integer> list){
if(root == null) return;
recurse(root.left, list);
list.add(root.val);
//System.out.println(root.val);
recurse(root.right, list);
}
public int getMinimumDifference(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
recurse(root, list);
//因为题目中提到二分查找树中至少有两个结点
int min = list.get(1) - list.get(0);
for(int i = 1; i < list.size() - 1; i++){
min = Math.min(min, list.get(i + 1) - list.get(i));
}
return min;
}
}
本文介绍了一种求解二分查找树中任意两节点间最小距离的方法。通过中根遍历将节点值存储到列表中,利用这些值计算最小距离。
1588

被折叠的 条评论
为什么被折叠?



