给定一个二叉搜索树的根节点 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。
二叉树总是有效的,每个节点的值都是整数,且不重复。
中序遍历的使用
import java.util.ArrayList;
import java.util.List;
public class MinDiffInBSTTest {
public static void main(String[] args) {
TreeNode t1=new TreeNode(4);
TreeNode t2=new TreeNode(2);
TreeNode t3=new TreeNode(6);
TreeNode t4=new TreeNode(1);
TreeNode t5=new TreeNode(3);
t1.left=t2;
t1.right=t3;
t2.left=t4;
t2.right=t5;
int num = minDiffInBST(t1);
System.out.println("num = " + num);
}
public static int minDiffInBST(TreeNode root) {
List<Integer> list = new ArrayList<>();
if (root == null) {
return -1;
}
dfs(root, list);
if (list.size() == 0) {
return -1;
}
int res = Integer.MAX_VALUE;
int pre = list.get(0);
for (int i = 1; i < list.size(); i++) {
res = Math.min(res, list.get(i)-pre);
pre = list.get(i);
}
return res;
}
private static void dfs(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
if (root.left != null) {
dfs(root.left, list);
}
list.add(root.val);
if (root.right != null) {
dfs(root.right, list);
}
}
}
中序遍历得到的数据是有序的,所以这里使用中序遍历的到的数据进行处理