代码随想录算法训练营Day22|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

Java电商秒杀系统性能优化(一)——电商秒杀系统框架回顾 电商秒杀系统框架回顾项目简介外部依赖框架回顾项目要点项目中存在的问题小结 课程是免费的,课程地址如下:SpringBoot搭建电商秒杀项目,课程真的很棒,作者的思路很清晰,建议各位读者可以跟着视频练习一下这个项目; 项目简介 通过SpringBoot快速搭建的前后端分离的电商基础秒杀项目。项目通过应用领域驱动型的分层模型设计方式去完成:用户otp注册、登陆、查看、商品列表、进入商品详情以及倒计时秒... 阅读详情

二叉搜索树的最近公共祖先

不考虑二叉搜索树这一条件的话,普通的二叉搜索树搜索最近的公共祖先就是昨日的做法,这种做法也能解决二叉搜索树的最近公共祖先。

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        // 如果当前节点为空,或者等于p或q,直接返回当前节点
        if (root == nullptr || root == p || root == q) {
            return root;
        }

        // 在左右子树中递归寻找p和q
        TreeNode* left = lowestCommonAncestor(root->left, p, q);
        TreeNode* right = lowestCommonAncestor(root->right, p, q);

        // 如果左右子树的返回值都不为空,说明当前节点就是最近公共祖先
        if (left != nullptr && right != nullptr) {
            return root;
        }

        // 否则,返回非空的子树返回值
        return left != nullptr ? left : right;
    }
};

没有用上二叉搜索树这一条件,但也能解题,但效率较低。

针对二叉搜索树,我们之前有做过,当对二叉搜索树进行中序编历时,结果是一个递增的数组。即公共祖先,val值必定处于p和q之间。

当从根节点向下遍历的过程中,如果遇到节点val值位于p和q之间,那么就寻找到了最近的公共祖先。具体参考代码随想录B站视频。

二叉搜索树找祖先就有点不一样了!| 235. 二叉搜索树的最近公共祖先_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1Zt4y1F7ww/?spm_id_from=333.788&vd_source=fc4a6e70e3a87b7ea67c2024e326e7c5从上到下遍历,考虑层序遍历的方式,具体代码如下:

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        queue<TreeNode*>queue;
        if(root == nullptr){
            return nullptr;
        }
        queue.push(root);
        TreeNode*cur = root;
        int min = p->val>q->val?q->val:p->val;//找到p,q中val的较小值
        int max = p->val<q->val?q->val:p->val;//找到p,q中val的较大值
        while(!queue.empty()){//层序遍历过程
            int level_size = queue.size();
            for(int i = 0; i <level_size; i ++){
            cur = queue.front();
            queue.pop();
            if(cur->val<=max and cur->val>=min){
                return cur;
            }//找到节点属于p,q间则返回
            if(cur->left)
                queue.push(cur->left);
            if(cur->right)
                queue.push(cur->right);
            } 
        }
        return nullptr;
    }
};

算法的时间复杂度和空间复杂度均为O(n)。

前序递归,中左右,参考代码随想录

代码随想录 (programmercarl.com)icon-default.png?t=N7T8https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html#%E6%80%9D%E8%B7%AF

class Solution {
private:
    TreeNode* traversal(TreeNode* cur, TreeNode* p, TreeNode* q) {
        if (cur == NULL) return cur;
                                                        // 中
        if (cur->val > p->val && cur->val > q->val) {   // 左
            TreeNode* left = traversal(cur->left, p, q);
            if (left != NULL) {
                return left;
            }
        }

        if (cur->val < p->val && cur->val < q->val) {   // 右
            TreeNode* right = traversal(cur->right, p, q);
            if (right != NULL) {
                return right;
            }
        }
        return cur;
    }
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        return traversal(root, p, q);
    }
};

二叉搜索树中的插入操作

由于树中的节点值是独一无二的,在二叉搜索树中寻找值应插入的节点的父节点位置,然后创建一个新节点并将其插入即可。

代码整体如下

class Solution {
public:
    // 在二叉搜索树中查找适合插入新节点的位置,并返回该位置的父节点
    TreeNode* findBST(TreeNode* root, int val) {
        // 如果当前节点为空,返回nullptr,表示没有找到合适的插入位置
        if (root == nullptr) return nullptr;
        // 如果val小于当前节点的值,应该在左子树中继续查找
        if (val < root->val) {
            // 如果左子节点为空,当前位置就是适合插入新节点的位置
            if (root->left == nullptr) return root;
            // 否则,在左子树中继续查找
            return findBST(root->left, val);
        } else {
            // 如果val大于或等于当前节点的值,应该在右子树中继续查找
            // 如果右子节点为空,当前位置就是适合插入新节点的位置
            if (root->right == nullptr) return root;
            // 否则,在右子树中继续查找
            return findBST(root->right, val);
        }
    }

    // 在二叉搜索树中插入一个新的节点
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        // 创建新节点
        TreeNode* newnode = new TreeNode(val);
        // 如果树为空,新节点即为根节点
        if (root == nullptr) {
            return newnode;
        }
        // 查找适合插入新节点的位置,并得到该位置的父节点
        TreeNode* parent = findBST(root, val);
        // 根据val的值决定新节点是作为左子节点还是右子节点
        if (val < parent->val) {
            parent->left = newnode;
        } else {
            parent->right = newnode;
        }
        // 返回根节点
        return root;
    }
};

算法的时间复杂度为O(logn)(二叉搜索树,最差为O(n)),空间复杂度为O(1)。

删除二叉搜索树中的节点

有五种情况

1.未找到需要删除的节点

2.删除的是叶节点

3.删除的节点仅有右子树

4.删除的节点仅有左子树

5.删除的节点左右子树都在

针对这五种情况,有以下五种解答方案

1.直接返回二叉搜索树的根节点

2.直接删除即可

3.将右孩子代替被删除的节点

4.将左孩子代替被删除的节点

5.有两种解决方式,分别是让被删除节点的右孩子或左孩子即位,以右孩子即位,查找右子树下的最小值节点,将节点的左子树全部接入该节点,或以左孩子即位,查找左子树下的最大值节点,将节点的右子树全部接入该节点。

class Solution {
public:
    TreeNode* find_parent(TreeNode* root, int key) {
        if (root == nullptr || (root->left == nullptr && root->right == nullptr)) {
            return nullptr; // 如果当前节点为空或为叶节点,返回nullptr
        }
        if (root->left != nullptr && root->left->val == key) {
            return root; // 如果左子节点的值等于key,返回当前节点作为父节点
        }
        if (root->right != nullptr && root->right->val == key) {
            return root; // 如果右子节点的值等于key,返回当前节点作为父节点
        }
        if (key < root->val) {
            return find_parent(root->left, key); // 如果key小于当前节点的值,递归地在左子树中查找
        } else {
            return find_parent(root->right, key); // 如果key大于或等于当前节点的值,递归地在右子树中查找
        }
    }

    TreeNode* deleteNode(TreeNode* root, int key) {
        if (root == nullptr) return nullptr;

        if (root->val == key) {
            // 要删除的节点是根节点
            if (root->left == nullptr) return root->right; // 只有右子树
            if (root->right == nullptr) return root->left; // 只有左子树
            // 有两个子节点,找到右子树的最小节点
            TreeNode* minNode = getMin(root->right);
            root->val = minNode->val; // 将右子树的最小节点的值赋给当前节点
            root->right = deleteNode(root->right, minNode->val); // 删除右子树中的最小节点
        } else if (key < root->val) {
            root->left = deleteNode(root->left, key); // 在左子树中递归删除
        } else {
            root->right = deleteNode(root->right, key); // 在右子树中递归删除
        }
        return root;
    }

    TreeNode* getMin(TreeNode* node) {
        while (node->left != nullptr) 
            node = node->left;
        return node;
    }
};

算法的时间复杂度需要考虑树的高度,查找树中要删除的节点,需要O(logn)的时间,当需要删除的节点有两个子节点时,需要找到右子树中的最小节点,这同样需要O(logn)的时间,最坏情况下时间复杂度为O(logn)。

空间复杂度主要取决于递归栈的深度,因此,空间复杂度也为O(logn)。

智能气象站:ESP32驱动的心知天气数据可视化实践 本文详细介绍了基于ESP32微控制器和心知天气API构建智能气象站的完整实践。通过Arduino开发环境,实现天气数据的获取、JSON解析与OLED屏可视化展示,涵盖硬件连接、API配置、低功耗优化及部署问题排查,为物联网开发者提供实用指南。 阅读详情

相关推荐

AI工程实战:如何在实际工程中运用Claude Code

本文探讨了利用大型语言模型(LLM)进行复杂工程项目的结构化工作流。核心策略包括:1)规划先行,通过"探索子代理任务"主动分析代码库并澄清需求;2)定制AI行为,要求简洁输出和列出未解决问题;3)将大型任务分解为多阶段计划以管理上下文窗口限制;4)利用GitHub Issues作为外部存储实现跨会话状态持久化。这种"规划-执行"模式将AI从代码生成器升级为项目管理代理,通过与GitHub CLI等工具深度集成,实现了高效的多阶段工程协作。该方法展示了AI辅助编程向流程

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 1088

代码随想录算法训练营第day22|235. 二叉搜索树的最近公共祖先 、 701.二叉搜索树中的插入操作 、 450.删除二叉搜索树中的节点

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。如图,我们从根节点搜索,第一次遇到 cur节点是数值在[q, p]区间中,即 节点5,此时可以说明 q 和 p 一定分别存在于 节点 5的左子树,和右子树中。如图所示:p为节点6,q为节点9。

qq_60513199的博客 667

Windows本地化部署Dify完整指南

本文详细介绍了在Windows系统上本地化部署Dify的完整步骤,涵盖了Docker Desktop的安装与配置、Dify源代码的获取、环境变量的设置、服务的启动与管理、以及常见问题的解决方案。文章首先指导用户如何下载和安装Docker Desktop,并配置WSL 2功能。接着,详细说明了如何获取Dify源代码,并通过Docker Compose启动服务。文章还提供了高级配置指南,包括如何配置大语言模型和更新Dify版本。最后,针对Docker镜像拉取失败等常见问题,提供了详细的诊断和解决方案。通过本文,

jacky_zhuyuanlu的博客 1万+

代码随想录算法训练营三刷day22 |二叉树之 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

到这里,大家应该能感受到,如何通过递归函数返回值完成了新加入节点的父子关系赋值操作了,下一层将加入节点返回,本层用。可以有,也可以没有,但递归函数如果没有返回值的话,实现是比较麻烦的,下面也会给出其具体实现代码。说到递归函数的返回值,在上一题中通过递归返回值来加入新节点, 这里也可以通过递归返回值删除节点。终止条件就是找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。这里把添加的节点返回给上一层,就完成了父子节点的赋值操作了,详细再往下看。,其余的情况的最近公共祖先就是根节点。

baimaozi_007的博客 925

Allegro因为精度问题导致走线连接不上的解决办法

在用Allegro做PCB设计的时候,尤其是从其它单板上导数据过来的时候,有时会因为精度不一致导致连接不上,如下图。一般来说,可以逐个重新连接一下,但是如果连接点位比较多的话,需要花费较多时间。下面介绍如何使用Allegro自带的功能解决这个问题,具体操作如下。和Convert Figure Stackups to vias。因为精度问题导致走线连接不上的解决办法。线和过孔因为精度有微小的连接偏差。

weixin_54787054的博客 2607

基于深度学习的三维重建算法——详解与实现

随着深度学习技术的迅猛发展,基于深度学习的三维重建算法在最近几年取得了显著的进展。而基于深度学习的三维重建算法通过利用深度神经网络,能够从大规模数据中学习到更准确、鲁棒的三维结构表示。本文综述了基于深度学习的三维重建算法,并给出了相应的源代码。随着深度学习技术的不断发展,我们相信基于深度学习的三维重建算法将会在未来得到更广泛的应用。实验结果表明,基于深度学习的三维重建算法在准确性和鲁棒性方面取得了显著的提升。以上是关于基于深度学习的三维重建算法的详细介绍与实现,希望对您有所帮助。

CyberGenius的博客 1227

代码随想录算法训练营day22||二叉树part08、● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

对于二叉搜索树的最近祖先问题,其实要比普通二叉树公共祖先问题 (opens new window)简单的多。不用使用回溯,二叉搜索树自带方向性,可以方便的从上向下查找目标区间,遇到目标区间内的节点,直接返回。最后给出了对应的迭代法,二叉搜索树的迭代法甚至比递归更容易理解,也是因为其有序性(自带方向性),按照目标区间找就行了。读完本篇,大家会发现二叉搜索树删除节点比增加节点复杂的多。因为二叉搜索树添加节点只需要在叶子上添加就可以的,不涉及到结构的调整,而删除节点操作涉及到结构的调整。

qq_40222433的博客 1347

基于STM32、HAL库的IP5356M快充协议芯片简介及驱动程序设计

@param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。

corlin6688的博客 1217

代码随想录算法训练营Day22|Leetcode235二叉搜索树的最近公共祖先、Leetcode701二叉搜索树中的插入操作、Leetcode450删除二叉搜索树中的节点

Day22打卡! 时长:2h 今日感想:深刻理解二叉搜索树的应用~

m0_60979177的博客 917

Qt | linux+openCV+Qt6.5.3环境搭建成功版(带例子)

opencv安装 Qt 实战举例

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 1884

PyTorch深度学习实战(24)——使用U-Net架构进行图像分割

图像分割 (Image segmentation) 是计算机视觉领域中的一个重要任务,旨在将图像划分为具有语义信息的不同区域或对象。与目标检测任务不同,图像分割要求像素级别的精确定位和分类,将每个像素标记为属于哪个类别或属于哪个区域。在本节中,我们将介绍图像分割的基本概念,并训练一个基于 U-Net 架构的图像分割模型。

盼小辉丶的博客 1万+

代码随想录算法训练营Day22|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

前一题求解二叉树的最近公共祖先,是利用回溯自底向上搜索,遇到一个节点的左子树里有p,右子树里有q,就表明当前节点是最近公共祖先。若是对二叉搜索树进行两节点最近公共祖先查找,可以利用二叉搜索树的结构特点,p和q的最近公共祖先一定满足介于[p,q]区间内的条件,基于此可以分别进行判断搜索。由于是对二叉搜索树进行插入操作,并且插入的新值和二叉搜索树任意节点值都不同,因此只要寻找到合适的叶子节点进行插入操作即可。

m0_68682181的博客 754

【Altium Designer】Off grid pin解决方法

​今天我画完原理图编译时,出现了太多的黄色(出现warning警告提示)Off grid pin警告,这个警告并不是原理图电气连接出问题了,而是元器件或器件PIN脚没有和栅格对齐造成的原因。再编译还是出现这个警告。 最后经过不断翻阅网上经验和实践,才最终解决,本经验详细记录了解决该警告的有效方法。 解决方案:以下是问题解决步骤... ​

夜半少年的博客 7546

代码随想录算法训练营 day22| 235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

剩下的情况,就是cur节点在区间(p->val <= cur->val && cur->val <= q->val)或者 (q->val <= cur->val && cur->val <= p->val)中,那么cur就是最近公共祖先了,直接返回cur。将删除节点(元素7)的左孩子放到删除节点(元素7)的右子树的最左面节点(元素8)的左孩子上,就是把5为根节点的子树移到了8的左孩子的位置。递归函数不用返回值也可以,找到插入的节点位置,直接让其父节点指向插入节点,结束递归,也是可以的。

weixin_42179093的博客 148

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

代码随想录算法训练营day22|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

二叉搜索树递归不用分前中后序,因为他本身就可以看作是排好序的二叉树,且中序遍历的值是升序的。

weixin_64883584的博客 435

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

代码随想录算法训练营day22|235二叉搜索树的最近公共祖先 |701 二叉搜索树中的插入操作 |450 删除二叉搜索树中的节点

首先在二叉搜索树中的插入操作,大家不用恐惧其重构搜索树,其实根本不用重构。然后在递归中,我们重点讲了如何通过递归函数的返回值完成新加入节点和其父节点的赋值操作,并强调了搜索树的有序性。最后依然给出了迭代的方法,迭代的方法就需要记录当前遍历节点的父节点了,这个和没有返回值的递归函数实现的代码逻辑是一样的。

xinrenne的博客 255

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

代码随想录算法训练营Day22|LC235 二叉搜索树的最近公共祖先&LC701 二叉搜索树的插入操作&LC450 删除二叉搜索树中的节点

一句话总结:删除二叉搜索树中的节点怪复杂的。

qq_62428331的博客 326

代码随想录算法训练营Day 22|LeetCode235 二叉搜索树的最近公共祖先、Leetcode701 二叉搜索树中的插入操作、Leetcode450 删除二叉搜索树中的节点

需要理解一点:从上向下递归遍历,第一次遇到 cur节点是数值在[q, p]区间中,那么cur就是 q和p的最近公共祖先。根据二叉搜索树性质检索,找到NULL位置插入节点即可。(无需重构成平衡树)时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(h)空间复杂度:O(n)

qq_52807368的博客 970

代码随想录算法训练营 DAY 22 | 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

利用二叉搜索树的性质从上到下去遍历,遇到 cur节点是数值在[p, q]区间中则一定可以说明该节点cur就是p 和 q的公共祖先。问题来了,?如果 从节点5继续向左遍历,那么将错过成为p的祖先, 如果从节点5继续向右遍历则错过成为q的祖先。所以当我们从上向下去递归遍历,第一次遇到 cur节点是数值在[q, p]区间中,那么cur就是 q和p的最近公共祖先。

qq_35904005的博客 520

代码随想录算法训练营day22 |235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

【思考】通过递归函数的返回值完成父子节点的赋值是可以带来便利的。235. 二叉搜索树的最近公共祖先。

2402_83072061的博客 487

代码随想录算法训练营 day22 || 235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

其中关于定位节点位于的方向非常的有必要,然后对于定位到的节点,直接在其位置上就进行操作,因为常理上应当是定位到待删除结点的父节点,然后对父节点的left或者right进行操作,然后返回被删除的节点,但是现在直接在递归上通过返回删除位置,将删除了节点的形成的子树或者路径直接缀连到了原来的树上,真的厉害。思路:昨天的二叉树的最近公共祖先是使用路径重合位置的方法来实现的,并没有采用递归的方式进行实现,其实路径方法也可以用在BST的最近公共祖先上,但是时间效率较低,所以尝试理解学习递归的思想。

旭 448

代码随想录算法训练营day22| LeetCode 235 二叉搜索树的最近公共祖先、LeetCode 701 二叉搜索树中的插入操作、LeetCode 450 删除二叉搜索树中的节点

代码随想录算法训练营day22

qq_51588716的博客 255

代码随想录算法训练营day22 | 235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

要修改子节点的题目,可以在递归时将当前的根节点返回,并在递归逻辑中使用其父节点的左右孩子接住返回的节点。235.二叉搜索树的最近公共祖先:和昨天的搜索类似的,但是可以利用二叉搜索树的性质进行加速,判断根节点和p、q节点的大小关系。701.二叉搜索树中的插入操作:插入5,根节点为4,则需要插入在右子树中,返回的节点使用root->left或者right接住 ,依此类推,最后再返回root即可。450.删除二叉搜索树中的节点。

2301_77450803的博客 121

代码随想录算法训练营Day22 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点 | Python | 个人记录向

二叉树:235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点。

Python基本算法 627

代码随想录算法训练营Day22 | 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

思路:首次进入[p,q]区间。如果在区间右边,则往左遍历,如果在区间左边,则往右遍历。

qq_24817679的博客 314

代码随想录算法训练营Day22 —— 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

二叉搜索树是有序的,那得好好利用一下这个特点。因为是有序树,所有 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。即 中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p。那么只要从上到下去遍历,遇到 cur节点是数值在[p, q]区间中则一定可以说明该节点cur就是p 和 q的公共祖先。当我们从上向下去递归遍历,第一次遇到 cur节点是数值在[q, p]区间中,那么cur就是 q和p的最近公共祖先。

weixin_43793717的博客 176
上一篇: 代码随想录算法训练营day21|530.二叉搜索树的最小绝对值差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先
下一篇: 代码随想录Day23|669.修建二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
viaNoir
博客等级 码龄10年 535粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值