LeetCode783. 二叉搜尋樹結點最小距離
阿新 • • 發佈:2018-12-24
給定一個二叉搜尋樹的根結點 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的差值。
注意:
- 二叉樹的大小範圍在
2
到100
。 - 二叉樹總是有效的,每個節點的值都是整數,且不重複。
思路:遍歷二叉樹,找出每個結點,再將找出的結點作為一棵新二叉樹進行遍歷,求這顆新二叉樹的根結點與其他結點的最小差值,直到原二叉樹遍歷完,並更新最小差值。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int minDiffInBST(TreeNode root) { ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>(); //佇列結構用來遍歷二叉樹 queue.addLast(root); int min=Integer.MAX_VALUE; //最小差值 while(!queue.isEmpty()) { TreeNode node=queue.removeFirst(); int temp=findMin(node); if(temp<min) { min=temp; } if(node.left!=null) { queue.addLast(node.left); } if(node.right!=null) { queue.addLast(node.right); } } return min; } public int findMin(TreeNode root) { ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>(); //佇列結構用來遍歷二叉樹 if(root.left!=null) { queue.addLast(root.left); } if(root.right!=null) { queue.addLast(root.right); } int min=Integer.MAX_VALUE; //最小差值 int value=root.val; while(!queue.isEmpty()) { TreeNode node=queue.removeFirst(); int temp=Math.abs(node.val-value); if(temp<min) { min=temp; } if(node.left!=null) { queue.addLast(node.left); } if(node.right!=null) { queue.addLast(node.right); } } return min; } }