题目:
题解:
根据搜索二叉树的特性,中序遍历的结果是升序列表,如果两节点绝对值差最小,那么两节点必须是相邻节点,使用中序遍历树时,记录前驱节点,不断更新当前节点和前驱节点差值。
/**
* 前驱节点
*/
public TreeNode preNode;
/**
* 最小差值
*/
public int minValue = Integer.MAX_VALUE;
public int getMinimumDifference(TreeNode root) {
dfsForGetMinimumDifference(root);
return minValue;
}
public void dfsForGetMinimumDifference(TreeNode root) {
if (root == null) {
return;
}
dfsForGetMinimumDifference(root.left);
if (preNode != null && root.val - preNode.val < minValue) {
minValue = root.val - preNode.val;
}
preNode = root;
dfsForGetMinimumDifference(root.right);
}
时间复杂度:O(n)