Loading

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);
    }
}
posted @ 2020-10-24 12:09  上海井盖王  阅读(90)  评论(0)    收藏  举报