leetcode 530. Minimum Absolute Difference in BST二叉搜尋樹的最小絕對差 (簡單)

iicode發表於2022-11-24

一、題目大意

給你一個二叉搜尋樹的根節點 root ,返回 樹中任意兩不同節點值之間的最小差值 。

差值是一個正數,其數值等於兩值之差的絕對值。

示例 1:

img

輸入:root = [4,2,6,1,3]

輸出:1

示例 2:

img

輸入:root = [1,0,48,null,null,12,49]

輸出:1

提示:

  • 樹中節點的數目範圍是 [2, 104]
  • 0 <= Node.val <= 105

來源:力扣(LeetCode)
連結:https://leetcode.cn/problems/...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

二、解題思路

這道題給我們一棵二叉搜尋樹,讓我們求任意個節點值之間的最小絕對差。由於BST的左<根<右的性質可知,如果按照中序遍歷會得到一個有序陣列,那麼最小絕對差肯定在相信的兩個節點值之之間產生。所以我們的做法就是對BST進行中序遍歷,然後當前節點值和之前節點值求絕對差並更新結果res。需要注意的是在處理第一個節點值時,沒有前節點所以不能求絕對差。我們用變數pre來表示前節點,將其初始化為-1(節點值不為負數),我們就知道pre是否存在。

三、解題方法

3.1 Java實現

public class Solution {
    public int getMinimumDifference(TreeNode root) {
        int[] res = {Integer.MAX_VALUE};
        int[] pre = {-1};
        inorder(root, pre, res);
        return res[0];
    }

    void inorder(TreeNode root, int[] pre, int[] res) {
        if (root == null) {
            return;
        }
        inorder(root.left, pre, res);
        if (pre[0] != -1) {
            res[0] = Math.min(res[0], root.val - pre[0]);
        }
        pre[0] = root.val;
        inorder(root.right, pre, res);
    }
}

四、總結小記

  • 2022/10/5 有時候生活不一定比工作輕鬆

相關文章