题目1:
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
注意:本题与 530:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 相同
示例 1:
输入:root = [4,2,6,1,3]
输出:1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
注意到是二叉搜索树,中序遍历是升序数列;可以根据该性质比较任意两个节点之间的差值。
方法1:
中序遍历,先存储后比较。
方法2:
可以直接进行比较,使用一个类变量保存前一个节点的值,
注意对首节点需要特殊处理。
//中序遍历 先存储
class Solution {
public void dfs (TreeNode root, List<Integer> ans) {
if (root == null) {
return;
}
dfs (root.left, ans);
ans.add(root.val);
dfs (root.right, ans);
return;
}
public int minDiffInBST(TreeNode root) {
if (root == null) {
return 0;
}
List<Integer> ans = new ArrayList<Integer> ();
int res = Integer.MAX_VALUE;
dfs (root, ans);
int i = 1;
while (i < ans.size()) {
res = Math.min (res, ans.get(i) - ans.get(i-1));
i++;
}
return res;
}
}
//
class Solution {
//类变量
int res;
int pre;
public void dfs (TreeNode root) {
if (root == null) {
return;
}
dfs (root.left);
//首节点特殊处理 以免被root.val - pre干扰
if (pre == -1) {
pre = root.val;
} else {
res = Math.min(res, root.val - pre);
pre = root.val;
}
//记录上一次节点
pre = root.val;
dfs (root.right);
return;
}
public int minDiffInBST(TreeNode root) {
if (root == null) {
return 0;
}
res = Integer.MAX_VALUE;
pre = -1;
dfs (root);
return res;
}
}