530. [二叉树]二叉搜索树的最小绝对差
530. 二叉搜索树的最小绝对差
方法一:DFS遍历+暴力搜索
朴素的想法,我们可以前序(中序、后序)遍历整颗二叉树,将数值存入一个ArrayList中,接着再使用两层循环遍历搜索最小的两数之差即可。
// 执行用时: 218 ms , 在所有 Java 提交中击败了 5.52% 的用户
// 内存消耗: 38.9 MB , 在所有 Java 提交中击败了 29.06% 的用户
class Solution {
public int getMinimumDifference(TreeNode root) {
List<Integer> ans = new ArrayList<>();
preorderVisit(root, ans);
int min = Integer.MAX_VALUE;
for(int i = 0; i < ans.size(); i++){
for(int j = i + 1; j < ans.size(); j++){
min = Math.min(min, Math.abs(ans.get(i)-ans.get(j)));
}
}
return min;
}
public void preorderVisit(TreeNode root, List<Integer> list){
if(root == null){
return ;
}
list.add(root.val);
preorderVisit(root.left, list);
preorderVisit(root.right, list);
}
}
}
方法二:中序遍历
// 执行用时: 1 ms , 在所有 Java 提交中击败了 82.39% 的用户
// 内存消耗: 38.3 MB , 在所有 Java 提交中击败了 91.00% 的用户
class Solution {
int pre;
int ans;
public int getMinimumDifference(TreeNode root) {
ans = Integer.MAX_VALUE;
pre = -1;
dfs(root);
return ans;
}
public void dfs(TreeNode root) {
if (root == null) {
return;
}
dfs(root.left);
if (pre == -1) {
pre = root.val;
} else {
ans = Math.min(ans, root.val - pre);
pre = root.val;
}
dfs(root.right);
}
}

浙公网安备 33010602011771号