思路一:先把二叉搜索树转换成 升序数组,分别计算相邻数的绝对值差。
private int minDiff = Integer.MAX_VALUE;
private TreeNode preNode = null;
public int getMinimumDifference(TreeNode root) {
inOrder(root);
return minDiff;
}
private void inOrder(TreeNode node) {
if (node == null) return;
inOrder(node.left);
if (preNode != null) minDiff = Math.min(minDiff, node.val - preNode.val);
preNode = node;
inOrder(node.right);
}
思路二:利用递归寻找数值上相邻的节点,root的左子树的最右节点,右子树的最左节点
class Solution {
private int minx = Integer.MAX_VALUE;
public int getMinimumDifference(TreeNode root) {
findMin(root);
return minx;
}
public void findMin(TreeNode root)
{
if(root != null )
{
int a = root.val;
TreeNode node = root.right;
while(node != null)
{
minx = Math.min(minx, Math.abs(a - node.val));
node = node.left;
}
TreeNode node2 = root.left;
while(node2 != null)
{
minx = Math.min(minx, Math.abs(a - node2.val));
node2 = node2.right;
}
findMin(root.left);
findMin(root.right);
}
}
}