783. 二叉搜尋樹節點最小距離

北顧丶發表於2020-12-11

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

示例:

輸入: root = [4,2,6,1,3,null,null]
輸出: 1
解釋:
注意,root是樹節點物件(TreeNode object),而不是陣列。

給定的樹 [4,2,6,1,3,null,null] 可表示為下圖:

          4
        /   \
      2      6
     / \    
    1   3  

最小的差值是 1, 它是節點1和節點2的差值, 也是節點3和節點2的差值。

思路:首先,建立一個List陣列用於儲存通過先序遍歷的二叉樹節點的值,然後對,List進行排序。最後通過Main方法,迴圈遍歷相鄰兩個元素之間的差值,獲取到最小的便是結果。

class Solution {
    List<Integer> vals;
    public int minDiffInBST(TreeNode root) {
        vals = new ArrayList();
        dfs(root);
        Collections.sort(vals);

        int ans = Integer.MAX_VALUE;
        for (int i = 0; i < vals.size() - 1; ++i)
            ans = Math.min(ans, vals.get(i+1) - vals.get(i));

        return ans;
    }

    public void dfs(TreeNode node) {
        if (node == null) return;
        vals.add(node.val);
        dfs(node.left);
        dfs(node.right);
    }
}

相關文章