import java.util.Stack;
class Solution {
// 递归
TreeNode pre;// 记录上一个遍历的结点
int result = Integer.MAX_VALUE;
public int getMinimumDifference(TreeNode root) {
if(root == null){
return 0;
}
traversal(root);
return result;
}
private void traversal(TreeNode root) {
if(root == null){
return;
}
//左
traversal(root.left);//相当于不停的递归到最左子结点
//中, 处理判断
if(pre != null){
result = Math.min(result, root.val - pre.val);// 遇到较小值更新
}
pre = root;
//右
traversal(root.right);// 这里并不是说一直递归到右结点,可以想象成右子树的递归,右子树的遍历同样按照中序遍历方式
}
// 迭代法 中序遍历
TreeNode pre;
public int getMinimumDifference1(TreeNode root) {
if(root == null){
return 0;
}
Stack<TreeNode> stack = new Stack<>(); //
TreeNode cur = root;
int result = Integer.MAX_VALUE;
while (cur != null || !stack.isEmpty()){
if(cur != null){// 一直可以递归遍历到最左子结点
stack.push(cur); // 将访问的节点放进栈
cur = cur.left; // 左
}else {
cur = stack.pop();
if (pre != null) { // 中 , 处理 判断
result = Math.min(result, cur.val - pre.val);
}
pre = cur;
cur = cur.right; // 右
}
}
return result;
}
}
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;
}
}
6.21 二叉搜索树的最小绝对差——【LeetCode】
最新推荐文章于 2024-07-25 19:34:38 发布