二叉排序树(BST)的创建和删除

C语言 数据结构 二叉排序树(BST) 1、二叉排序树简介:二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),也称二叉搜索树。 树中的任意节点上的左子树都比父节点小,右子树都比父节点大的,且所有值都唯一的树叫二叉排序树。 2、二叉排序树的查找: 如果当前节点的键值等于待查询的数值,则找到; 若前节点的键值小于待查询的数值,由二叉树的定义可知,大的数值在右子树,则递归查找该节点... 阅读详情

1.二叉排序树介绍

二叉排序树:BST(Binary Sort Tree),对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,如右子节点的值当当前节点值大。如果有相同的值,可以将改节点放在左子节点或右子节点。
比如针对数据{7,3,10,12,5,1,9},对应的二叉排序树为:
在这里插入图片描述

2.二叉排序树的创建

2.1思路分析:
(1)先判断二叉排序树的根节点是否为空,如果为空则把当前节点复制给跟节点
(2)如果不为空,则进行添加操作
(3)进行添加操作时先判断当前节点的值是否大于添加节点,如果大于再判断当前节点左节点是否为空,如果为空则进行添加,如果不为空则进行递归操作
(4)如果当前节点小于添加节点,则判断当前节点的右子节点是否为空,如果为空则进行添加操作,如果不为空则进行递归操作
2.2代码演示

//二叉排序树
class BinarySortTree{
    //二叉排序树的根节点
    private Node root;

    public Node getRoot() {
        return root;
    }

    public void setRoot(Node root) {
        this.root = root;
    }

    //创建二叉排序树
    public void add(Node node) {
        if (root == null) {
            root = node;
            return;
        }
        root.addNode(node);
    }
    //中序遍历
    public void infixOrder() {
        if (root != null) {
            root.infixOrder();
            return;
        }
        throw new NullPointerException("根节点为空");
    }
  
  }
 //二叉排序树的节点
class Node{
    private int value;
    private Node left;
    private Node right;
    public Node(int value) {
        this.value = value;
    }
    public Node() {}

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public Node getLeft() {
        return left;
    }

    public void setLeft(Node left) {
        this.left = left;
    }

    public Node getRight() {
        return right;
    }

    public void setRight(Node right) {
        this.right = right;
    }

    /**
     * 向二叉排序树中添加节点
     * @param node 要添加的节点
     */
    public void addNode(Node node) {
        if (node == null) {
            throw new NullPointerException("节点为空");
        }
        //判断当前节点的值是否大于添加节点
        if (this.value > node.value) {
            //判断当前节点的左子节点是否为空
            if (this.left == null) {
                this.left = node;
                return;
            }
            //递归
            this.left.addNode(node);
            return;
        }
        //判断当前节点的右子节点是否为空
        if (this.right == null) {
            this.right = node;
            return;
        }
        //递归
        this.right.addNode(node);
    }
    //中序遍历
    public void infixOrder() {
        if (this.left != null) {
            this.left.infixOrder();
        }
        System.out.println(this);
        if (this.right != null) {
            this.right.infixOrder();
        }
    }
     @Override
    public String toString() {
        return "Node{" +
                "value=" + value +
                '}';
    }

 }

3.二叉排序树的删除

在这里插入图片描述
3.1思路分析
二叉排序树的删除情况比较复杂,有下面6种情况要考虑
(1)删除叶子节点(比如2,5,9,12)
(2)删除只有一个子节点的节点(比如1)
(3)删除有两颗子节点的节点(比如7,3,10)
(4)删除叶子节点为根节点时
(5)删除只有一个子节点的节点为根节点
(6)删除有两颗子节点的节点为根节点

第一种情况:
(1)先要找到要删除的节点targetNode
(2)再找到要删除节点的父节点parent
(3)判断targetNode时parent的左子节点还是右子节点
(4)左子节点:parent.left = null,右子节点 parent.right = null
第二种情况:
(1)先要找到要删除的节点targetNode
(2)再找到要删除节点的父节点parent
(3)判断targetNode时parent的左子节点还是右子节点
(4)判断targetNode的子节点是左子节点还是右子节点
(5)如果targetNode是parent的左子节点
(5.1)如果targetNode有左子节点parent.left = target.left
(5.2)如果targetNode有右子节点parent.left= target.right
(6)如果targetNode是parent的右子节点
(6.1)如果targetNode有左子节点parent.right= target.left
(6.2)如果targetNode有右子节点parent.right= target.right
第三种情况:
(1)先要找到要删除的节点targetNode
(2)再找到要删除节点的父节点parent
(3)从targetNode的左子树上找到最大的节点并复制给max
(4)删除最大节点
(5)max.left = targetNode.left
(6)max.right = targetNode.right
(7)如果如果targetNode是parent的左子节点,parent.left =max
(8)如果如果targetNode是parent的右子节点,parent.right=max
第四种情况:
直接把根节点置空,root = null
第五种情况:
(1)如果根节点左子节点,root = roo.left
(2)如果根节点右子节点,root = roo.right
第六种情况:
(1)从root的左子树上找到最大的节点并复制给max
(2)删除最大节点
(3)max.left = root.left
(4)max.right = root.right
(5) root = max
3.2代码实现

//查找要删除的节点
public Node search(int value) {
    if (this.root != null){
        return this.root.search(value);
    }
    throw new NullPointerException("根节点为空");
}
//查找要删除节点的父节点
public Node searchParent(int value) {
    if (this.root != null){
        return this.root.searchParent(value);
    }
    throw new NullPointerException("根节点为空");
}
//删除节点
public Node deleteNode(int value) {
    if (this.root != null){
        //需要先去找到要删除的节点
        Node targetNode = this.root.search(value);
        //找到要删除节点的父节点
        Node parent = this.root.searchParent(value);
        //表示没有找到要删除的节点
        if (targetNode == null) {
            return null;
        }
        //说明根节点就是要我们要删除的节点
        if (this.root.getLeft() == null && this.root.getRight() == null) {
            Node temp = this.root;
            this.root = null;
            return temp;
        }
        //说明根节点就是要我们要删除的节点,而根节点又有一个左子节点或右子节点
        if (this.root.getValue() == value &&
                (this.root.getLeft() == null || this.root.getRight() == null)) {
            //说明左节点不为空
            if (this.root.getLeft() != null) {
                Node temp = this.root;
                this.root = this.root.getLeft();
                return temp;
            }
            //说明右节点不为空
            Node temp = this.root;
            this.root = this.root.getRight();
            return temp;
        }
        //说明根节点就是要我们要删除的节点,而根节点又有一个左子节点和一个右子节点
        if (this.root.getValue() == value &&
                (this.root.getLeft() != null && this.root.getRight() != null)) {
            //需要从要删除节点的左子树上找到最大的节点,然后替换要删除的节点
            Node max = searchMax(this.root.getLeft());
            deleteNode(max.getValue());
            max.setLeft(this.root.getLeft());
            max.setRight(this.root.getRight());
            Node temp = this.root;
            this.root = max;
            return temp;
        }
        //说明要删除节点没有左右子节点,改要删除的节点是叶子节点
        if (targetNode.getLeft() == null && targetNode.getRight() == null) {
            //说明要删除是父节点的左节点
            if (parent.getValue() > targetNode.getValue()) {
                parent.setLeft(null);
                return targetNode;
            }
            //说明要删除是父节点的右节点
            parent.setRight(null);
            return targetNode;
        }
        //说明要删除节点有一个左子节点或右子节点
        if (targetNode.getLeft() == null || targetNode.getRight() == null) {
            //说明要删除是父节点的左节点
            if (parent.getValue() > targetNode.getValue()) {
                //说明要删除节点有一个左子节点
                if (targetNode.getLeft() != null) {
                    parent.setLeft(targetNode.getLeft());
                    return targetNode;
                }
                //说明要删除节点有一个右子节点
                parent.setLeft(targetNode.getRight());
                return targetNode;
            }
            //说明要删除节点有一个左子节点
            if (targetNode.getLeft() != null) {
                parent.setRight(targetNode.getLeft());
                return targetNode;
            }
            //说明要删除节点有一个右子节点
            parent.setRight(targetNode.getRight());
            return targetNode;
        }
        //说明要删除的节点有一个左子节点和一个右子节点
        if (targetNode.getLeft() != null && targetNode.getRight() != null) {
            //需要从要删除节点的左子树上找到最大的节点,然后替换要删除的节点
            Node max = searchMax(targetNode.getLeft());
            deleteNode(max.getValue());
            max.setLeft(targetNode.getLeft());
            max.setRight(targetNode.getRight());
            //说明要删除是父节点的左节点
            if (parent.getValue() > targetNode.getValue()) {

                parent.setLeft(max);
                return targetNode;
            }
            //说明要删除是父节点的右节点
            parent.setRight(max);
            return targetNode;
        }
    }
    throw new NullPointerException("根节点为空");
}
//寻找值最大的节点
public Node searchMax(Node node) {
    if (node != null) {
        return node.searchMax();
    }
    throw new NullPointerException("节点为空");
}


/**
 * 查找要删除的节点
 * @param value 希望删除的节点的值
 * @return 删除的节点
 */
public Node search(int value) {
    //找到了要删除的节点
    if (this.value == value) {
        return this;
    }
    //如果当前的节点的值大于要删除的节点的值,则向左递归查找
    if (this.value > value && this.left != null) {
        return this.left.search(value);
    }
    //如果当前的节点的值小于要删除的节点的值,则向右递归查找
    if (this.value <= value && this.right != null) {
        return this.right.search(value);
    }
    //没有查找到要删除的节点
    return null;
}

/**
 * 查找要删除节点的父节点
 * @param value 要删除节点的值
 * @return 删除节点的父节点
 */
public Node searchParent(int value) {
    //说明找到了父节点
    if ((this.left != null && this.left.value == value) ||
            (this.right != null && this.right.value == value)) {
        return this;
    }
    //向左递归查找
    if (this.left != null && this.value > value) {
        return this.left.searchParent(value);
    }
    //向右递归查找
    if (this.right != null && this.value <= value) {
        return this.right.searchParent(value);
    }
    //没有查找到父节点
    return null;
}
public Node searchMax() {
    if (this.getRight() != null) {
        return this.getRight().searchMax();
    }
    return this;
}
lammps建模(电解液)opls-aa力场的基本流程 阅读详情

相关推荐

5分钟搞定!用FunASR在本地快速部署达摩院Paraformer语音识别模型(附常见问题解决)

本文详细介绍了如何在本地快速部署阿里达摩院开源的Paraformer语音识别模型。通过FunASR工具包,用户可在5分钟内完成环境配置、模型下载与基础识别,并掌握批量处理、性能调优及构建API服务等进阶技巧。文章重点解析了Paraformer的非自回归架构带来的速度优势,并提供了音频格式转换、依赖冲突、显存不足等常见问题的实战解决方案,助力开发者实现高效、离线的语音转写应用。

p1q2r的博客 705

BST 二叉排序树(Binary Sort Tree)

二叉排序树介绍: 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。如下图所示: 二叉排序树插入节点可以用递归实现,本次代码实现默认将大于等于当前节点值的节点放置在当前节点的右子节点。 使用中序遍历可以顺序输出二叉排序树中的值。 相比于插入节点,二叉排序树的删除情况比较复杂,有下面三种情况需要考虑 删除叶子节点(如上图的:2,5,9,12) 删除只有一个子树的节点(如:1) 删除有两颗子树的节点(如:7,3,10) 第一种情况: 删除叶子节点 思路:

qq_43183860的博客 269

squidpy 教程 1:在 AnnData 和 Squidpy 中导入空间数据

这些是 10x Genomics Visium 的 Space Ranger 输出提供的 keys,因此是第一个被采用的 keys。在这种情况下,我们假设空间坐标与像素具有相同的比例,因此我们将该值设置为 1。为此,我们将使用模拟数据集,并通过示例展示您应该注意的重要细节,以便利用 AnnData-Scanpy-Squidpy 生态系统的全部功能。并不是绝对必要的,但会节省您大量的输入,因为它是 Squidpy 和 Scanpy 的默认值。正如你所看到的,空间坐标被缩小了,图像被“放大”了。

🧑‍🎓 博士研究生在读 🔬 分享生物信息学、神经生物学方面的知识 💬 合作请在后台留言 2256

二叉排序树(BST)的构建与删除

二叉排序树(BST)的构建,插入,查找与删除 二叉排序树的删除结点分为三种情况 (1)叶子结点 这种情况最简单,由于删除叶子结点不会破坏整棵树的结构,只需要修改其双亲结点的指针即可 (2)要删除的结点只求左子树或者右子树 相对而言也比较简单,只需要删除结点后,将它的左子树或右子树整个移动到删除节点的位置即可。 #include<iostream> using namespace std...

卖核弹的小男孩 的博客 383

Visual Studio Code 打开java项目

在 Visual Studio Code 中打开并运行一个 Java 项目之前,你需要确保你已经完成了一些初始设置。

2675

STM32+EC800M-CN 4G模块数据透传踩坑实录:从AT指令调试到花生壳内网穿透

本文详细介绍了STM32与移远EC800M-CN 4G模块的数据透传实现过程,包括硬件连接、AT指令调试、TCP连接建立以及花生壳内网穿透配置。通过实战案例和代码示例,帮助开发者快速解决4G通信模块在物联网应用中的常见问题,提升数据传输稳定性。

weixin_42715608的博客 328

二叉排序树(BST)创建详解之C语言版

二叉排序树(Binary Sort Tree或 Binary Search Tree)又称二叉查找树,可以用来实现数据的快速查找,也方便数据的插入、删除等工作,因此适用于数据的动态查找。

sunnyoldboy博客 7783

数字滤波器应用介绍

线性滤波器FIR ,会引起恒定延迟,通过补零的方式补偿非线性滤波器IIR,会引起频率相关的延迟,通过零相位延迟filtfilt补偿从信号中去除不需要的频谱时,通过滤波和补偿实现。如果需要去除的频率与采样率相差甚远,比如4kHz 与100Hz, 可通过 低通滤波->补偿->降采样–> 滤波 补偿 -->上采样还原的方法。*降采样前一定要先低通滤波为了防止混叠。

weixin_39107270的博客 274

顺序数组,二叉链表创建二叉排序树,及遍历方法(数据结构c++)

对于任意节点,它的左子树上的所有节点的值都小于该节点的值;对于任意节点,它的右子树上的所有节点的值都大于该节点的值;左、右子树都是二叉排序树。这个性质保证了二叉排序树的中序遍历是有序的,因此也被称为二叉查找树。二叉排序树可以进行高效的查找、插入、删除操作,时间复杂度为O(log n)。

weixin_73748464的博客 2253

在Simulink中进行基于强化学习控制策略的三相逆变器仿真

本文详细介绍了在Simulink中实现基于强化学习控制策略的三相逆变器仿真的完整流程。主要内容包括:1)准备工作,确保MATLAB/Simulink及相关工具箱安装;2)构建三相逆变器基础模型,包含电源、全桥电路、LC滤波器和负载;3)重点阐述强化学习控制器设计,涉及状态空间、动作空间定义,奖励函数设计和算法选择;4)实现控制逻辑,包括环境创建、代理配置和训练过程;5)仿真设置与结果分析。文章强调了模型调试优化的重要性,并建议结合文献研究提升控制效果。该方案为开发自适应电力电子控制系统提供了实用指南。

amy_mhd的博客 272

从零构建爬虫抓取故宫数字文物库:Python最新实战技术详解

熟悉了动态内容加载的网页结构解析技巧。掌握了 Playwright + BeautifulSoup 的组合用法。实现了从网页→JSON→详情→图像的完整数据闭环。掌握了结构化保存与可视化分析能力。

2201_76125261的博客 1309

【数据结构X.9】二叉排序树(BST)的插入、查找(非递归),递归算法、中序遍历二叉排序树,输出有序树,层序遍历BST树、创建一颗二叉排序树、二叉排序树的删除

代码实现:二叉排序树(BST)的插入、查找(非递归),递归算法、中序遍历二叉排序树,输出有序树,层序遍历BST树、创建一颗二叉排序树、二叉排序树的删除等等。 概念: 没什么好说的,二叉排序树(BST)就是一个中序遍历有序的树,如图中的红色的区域左边整体小于右边,以77为根,明显绿色区域小于黄色区域, 所以进行插入时,遇到了比它的根节点大的,就放在左边,比它的根节点小的就放在右边,然后递归,如果遇到了合适的空位,也就是tr==NULL这时候就是插入的时候, 难点: 二叉排序树最难的地方在于其删除操作, 当是需

清凌的博客 1074

pycharm报错cannot start the IED:Error occurred during initialization of VMagent library failed...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1926

二叉排序树【BST】——创建、查找、删除、输出

1、结点值大小 左子树结点值

yyy_zxc的博客 1818

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

我要种一棵BST(二叉排序树)

BST(二叉排序树) 从BST的概述,BST的创建思想,BST的代码实现与分析,BST的图解展开阐述 若有疏漏,欢迎指出 博主空间https://blog.youkuaiyun.com/JOElib?type=blogAVL树https://joelib.blog.youkuaiyun.com/article/details/124072495?spm=1001.2014.3001.5502多叉树和图https://joelib.blog.youkuaiyun.com/article/details/124042140?spm=...

算法萌新一枚 927

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

二叉排序树(BST)创建,删除,查找操作

binary search tree,中文翻译为二叉搜索树、二叉查找树或者二叉排序树。简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1、要么是一棵空树 2、如果不为空,那么其左子树节点的值都小于根节点的值;右子树节点的值都大于根节点的值 3、其左右子树也是二叉搜索树 在算法导论中的定义: 下图中是BST的两个例子: 其中(b...

andong9624626311的博客 329

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数据结构 - 二叉排序树BST(创建、遍历、删除节点)

数组与链表区别: 二叉排序树的创建和遍历 代码实现 package tree.binarysorttree; public class BinarySortTreeDemo { public static void main(String []args){ int [] arr = {7,3,10,12,5,1,9}; BinarySortTree...

chun的博客 439

二叉排序树(BST)的创建,查找,插入,删除及最大最小结点

参考:https://blog.youkuaiyun.com/happyjacob/article/details/82795560 1、什么是二叉排序树 二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树 二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质: 非空左子树的所有键值小于其根结点的键值。 非空右子树的所有键值大于其根结点的键值。 左、右子树...

T_or_F的博客 1343

二叉排序树(BST)的创建、遍历和删除 _ java代码实现

1、基本介绍 二叉排序树:BST: (Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。 特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点 2、二叉排序树的功能实现 示例,将数组Array(7,3,10,12,5,1,9,2),创建成对应的二叉排序树如图 二叉排序树创建和遍历 一个数组创建成对应的二叉排序树,思路是判断待加入

qq_45974648的博客 354

Java数据结构与算法-树结构实际应用Ⅲ(二叉排序树(BST)创建、删除,平衡二叉树(AVL))[day10]

树结构的实际应用 二叉排序树 二叉排序树(BST)的介绍 先看一个需求: 给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加。 解决方案分析: 使用数组 数组未排序, 优点:直接在数组尾添加,速度快。 缺点:查找速度慢。数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。 使用链式存储-链表 不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动

SwaeLeeUknow的博客 342

二叉排序树(BST)的介绍及其创建,遍历及删除节点的代码实现(Java)

目录 1 二叉排序树的介绍 2 二叉排序树的创建和遍历 3 二叉排序树的节点的删除 1 二叉排序树的介绍 二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点 比如对于的数据 (7, 3, 10, 12, 5, 1, 9,2) ,对应的二叉排序树为: 2 二叉排序树的创建和遍历 本次遍历采用中序遍历,.

代码之美 421

二叉排序树的创建与删除

二叉排序树的创建与删除 二叉排序树:BST(Binary Sort Tree) 对于二叉排序树的任一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前的值大,如果有相同的值,可以将该节点放在左子节点或右子节点(需要保证左子树的任意节点的值都比右子树任意节点的值小) 创建 public void addNode(BinaryNode node) { if (node == null) { return; } // 值得比较 if (this.value < no

weixin_43747389的博客 225

二叉排序树(BST),二叉搜索树(创建、删除、查询)

#include<iostream> #include<stdlib.h> using namespace std; /* 二叉排序树 1、若根节点的左子树非空,则左子树上的所有结点关键字均小于根节点关键字 2、若根节点的右子树非空,则右子树上的所有结点关键字均大于根节点关键字 */ typedef struct node{ int data;//数据 struct node *lchild,*rchild;//定义左右孩子指针 }BSTNode;//二叉排序树

qq_41864443的博客 413

10. 数据结构之BST二叉排序树

二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的 任何一个非叶子节点,要求 左子节点的值比当前节点的值小, 右子节点的值比当前节点的值大。

weixin_45267102的博客 355

二叉排序树的创建和节点删除

二叉排序树-BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。 例如对于一批数据 (7, 3, 10, 12, 5, 1, 9) 对应的二叉排序树如下: 二叉排序树的创建 其实,二叉排序树创建比较简单,其实就是一个个节点加上,怎么将节点往树上加呢? 与父子树进行进行比较,比父子树...

sgyuanshi的博客 1778

数据结构(Java实现)-图解二叉排序树(二叉查找树、二叉搜索树)

二叉排序树 1、二叉排序树的介绍

jQueryZK的博客 2299
上一篇: 选择排序之堆排序
下一篇: 平衡二叉树(AVL)树详解
suixinghero
博客等级 码龄7年 10粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值