530.二叉搜索树的最小绝对差
思路
看到题目想到用递归,因为是二叉搜索树,所以就是比较邻近节点之间的值并记录最小值,所以采用递归方法中序遍历,唯一考虑的点是需设置一个全局节点来保存前一个节点,解决叶子节点计算值的问题。
同样中序遍历还可以采用迭代法,代码这里重新练习一下。
代码
递归
class Solution {
private int min=Integer.MAX_VALUE;
TreeNode pre;
public int getMinimumDifference(TreeNode root) {
if (root==null) return 0;
recur(root);
return min;
}
public void recur(TreeNode root){
if (root==null) return;
recur(root.left);
if (pre!=null) min=Math.min(min,root.val- pre.val);
pre=root;
recur(root.right);
}
}
迭代法
private int min=Integer.MAX_VALUE;
Stack<TreeNode> stack;
TreeNode pre;
public int getMinimumDifference(TreeNode root) {
if (root==null) return 0;
stack=new Stack<>();
TreeNode cur=root;
while (cur!=null ||!stack.isEmpty()){
if (cur!=null){
stack.push(cur);
cur=cur.left;
}else {
cur=stack.pop();
if (pre!=null) min=Math.min(min, cur.val- pre.val);
pre=cur;
cur=cur.right;
}
}
return min;
}