题目:
我的解法:
首先中序遍历该二叉搜索树,将得到的所有整数值存到list中,由于是BTS,得到的list一定是从小到大排序,而且题目中说了所有结点非负,直接用后一结点减前一结点即可得到差的绝对值,分别比较每两个数之间的差值,取最小的差值。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<Integer> list = new ArrayList<Integer>();
public int getMinimumDifference(TreeNode root) {
int min_num = Integer.MAX_VALUE;
dfs(root);
int d = list.size();
for(int i=0; i+1<d; i++){
int dif = list.get(i+1) - list.get(i);
min_num = Math.min(min_num, dif);
}
return min_num;
}
public void dfs(TreeNode root){
if(root.left!=null){
dfs(root.left);
}
list.add(root.val);
if(root.right!=null){
dfs(root.right);
}
}
}
官方题解:
在中序遍历的过程中,利用一个pre变量记录前驱结点的值,避免创建数组。
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);
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/solution/er-cha-sou-suo-shu-de-zui-xiao-jue-dui-chai-by-lee/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。