暴躁的AI把我给怼了,还是没回答对。。

ed7a51a9490d1c3d398623146e91b162.gif

精品推荐:

《征服数据结构》《经典图论算法》

自从上次问9.9和9.11哪个大,Kimi翻车之后,发现Chatgpt也跟着翻车,不过它们的回答结果每次都不一样,有时候是对的有时候是错的。后来我让它们用更劲爆的语气在回答下,结果它们开始怼我了3cc7fd2725120602b81664977f3e2a62.png。。。

下面是腾讯元宝的回复:

09db3b3417201eb081b3aadd96475e51.png

下面是Chatgpt的回复:

0f6a3fab1a28f0ffd1b5cb45dd52025c.png

--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第530题:二叉搜索树的最小绝对差。

问题描述

来源:LeetCode第530题

难度:简单

给你一个二叉搜索树的根节点 root ,返回树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。

示例1:

82aab38e623f00ecd708ffa17fdde75c.jpeg

输入:root = [4,2,6,1,3]

输出:1

示例2:

cc7542a947a1f148496986b18d2d62e5.jpeg

输入:root = [1,0,48,null,null,12,49]

输出:1

  • 树中节点的数目范围是 [2, 10^4]

  • 0 <= Node.val <= 10^5

问题分析

这题让计算二叉搜索树中任意两个节点的最小差值,如果我们把二叉搜索树中所有的节点值都保存下来,然后对这些值进行排序,排序之后只需要前后两两比较,即可找出最小的差值。

但是二叉搜索树有一个重要的特性我们不要忘了,就是它的中序遍历结果一定是有序的,我们只需要对这棵二叉搜索树进行中序遍历,遍历的时候和前一个节点比较,保存差值的最小值即可。

JAVA:

int ans = Integer.MAX_VALUE;// 差值的最小值
TreeNode pre;// 前一个节点

public int getMinimumDifference(TreeNode root) {
    inorder(root);
    return ans;
}

// 二叉树的中序遍历
public void inorder(TreeNode root) {
    if (root == null)
        return;
    inorder(root.left);// 递归左子树
    // 和前一个节点比较,保存最小的差值
    if (pre != null)
        ans = Math.min(ans, root.val - pre.val);
    pre = root;
    inorder(root.right);// 递归右子树
}

C++:

public:
    int ans = INT_MAX;// 差值的最小值
    TreeNode *pre;// 前一个节点
    int getMinimumDifference(TreeNode *root) {
        inorder(root);
        return ans;
    }

    // 二叉树的中序遍历
    void inorder(TreeNode *root) {
        if (root == nullptr)
            return;
        inorder(root->left);// 递归左子树
        // 和前一个节点比较,保存最小的差值
        if (pre)
            ans = min(ans, root->val - pre->val);
        pre = root;
        inorder(root->right);// 递归右子树
    }

Python:

def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
    ans = sys.maxsize  # 差值的最小值
    pre = None  # 前一个节点

    # 二叉树的中序遍历
    def inorder(node):
        nonlocal ans, pre
        if not node:
            return
        inorder(node.left)  # 递归左子树
        # 和前一个节点比较,保存最小的差值
        if pre:
            ans = min(ans, node.val - pre.val)
        pre = node
        inorder(node.right)  # 递归右子树

    inorder(root)
    return ans

6473247ac40a67a64939ae3548d3884a.gif

笔者简介

博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据结构和算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值