题目:
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
提示:树中至少有 2 个节点。
题解:
1.递归-中序遍历
步骤:
1.确定递归函数
参数:传入root,还有有全局变量保存前一个节点和最小差值
返回:因为不需要找某个节点返回,只需遍历整个树,因此不需要返回值
2.确定终止条件
如果是空节点则返回true
3.确定单层递归的逻辑
中序遍历,如果pre有保存二叉树的数据,更新最小差值。需要一直更新pre。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
TreeNode pre;
int res = Integer.MAX_VALUE;
public int getMinimumDifference(TreeNode root) {
traversal(root);
return res;
}
public void traversal(TreeNode root) {
if (root == null) {
return;
}
traversal(root.left);
if (pre != null) { //pre存了二叉树数据
int curVal = root.val - pre.val;
res = Math.min(res, curVal);
}
pre = root;
traversal(root.right);
}
}
参考:代码随想录