55、BST的相关题目-LeetCode.530.二叉搜索树的最小绝对差

这篇博客介绍了如何解决在二叉搜索树中找到两个不同节点之间最小差值的问题。提供了两种解法,分别是递归和迭代。递归解法利用中序遍历,维护前一个节点的信息来更新最小差值;迭代解法使用栈进行中序遍历,同样在遍历过程中更新最小差值。这两种方法都是基于二叉搜索树的特性,即左子节点小于父节点,右子节点大于父节点。
摘要由CSDN通过智能技术生成

题目描述:

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值

差值是一个正数,其数值等于两值之差的绝对值。

思路:

1)结合前面两道:二叉搜索树中的搜索和验证二叉搜索树

可以看出BST的题目,一般都有 递归和 迭代的中序遍历两种!

需要记清楚怎么做!

代码:

1)递归

class Solution {
    TreeNode pre;//用来记录前一个结点 很好用!
    int res = Integer.MAX_VALUE;
    public int getMinimumDifference(TreeNode root) {
        if(root == null) return 0;
        min(root);
        return res;
    }
    //第一个当前节点,一定是从 最左子树的 根节点开始!
    void min(TreeNode root){
        if(root == null) return;//走到底了

        //没有走到底,就往左继续走
        //左
        min(root.left);
        //中:也就是判断
        //前一个节点肯定是小的!
        if(pre != null){
            res = Math.min(res,root.val - pre.val);
        }
        //判断之后将该点设置为当前节点,往右递归
        pre = root;
        min(root.right);
    }
}

2)迭代:时间消耗较多

class Solution {
    TreeNode pre;
    Stack<TreeNode> stack;
    public int getMinimumDifference(TreeNode root) {
        if (root == null) return 0;
        stack = new Stack<>();
        TreeNode cur = root;
        int result = Integer.MAX_VALUE;
        while (cur != null || !stack.isEmpty()) {
            //先将每个节点都走到最左!
            while(cur != null) {
                stack.push(cur); // 将访问的节点放进栈
                cur = cur.left; // 左
            }
            cur = stack.pop(); 
            if (pre != null) { // 中
                result = Math.min(result, cur.val - pre.val);
            }
            pre = cur;
            cur = cur.right; // 右
        }
        return result;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值