Leetcode 783(530)二叉搜尋樹的最小距離
阿新 • • 發佈:2020-12-07
Leetcode 783(530)二叉搜尋樹的最小距離
資料結構定義:
給定一個二叉搜尋樹的根節點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的差值。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */
中序遍歷:
class Solution { int min = Integer.MAX_VALUE; Integer preValue; public int minDiffInBST(TreeNode root) { if(root == null){ return 0; } dfs(root); return min; } private void dfs(TreeNode root){ if(min == 1){ return; } if(root == null){ return; } dfs(root.left); if(preValue != null){ min = Math.min(min,Math.abs(root.val - preValue)); } preValue = root.val; dfs(root.right); } }
先排序後遍歷:
class Solution { List<Integer> result = new ArrayList<>(); public int minDiffInBST(TreeNode root) { dfs(root); if(result.size() <= 1) return 0; int min = Integer.MAX_VALUE; for(int i = 1;i < result.size(); ++i){ min = Math.min(min,Math.abs(result.get(i) -result.get(i - 1))); } return min; } private void dfs(TreeNode node){ if(node == null) return; dfs(node.left); result.add(node.val); dfs(node.right); } }