关于树的常见编程题

[编程题] 将满二叉树转换为求和树 给满出二叉树,编写算法将其转化为求和树 什么是求和树:二叉树的求和树, 是一颗同样结构的二叉树,其树中的每个节点将包含原始树中的左子树和右子树的和。 二叉树: 10 / \ -2 6 / \ / \ 8 -4 ... 阅读详情
  1. 获取二叉树中和最大的路径【leetcode124】
    二叉树每一个节点都有一个数,求和最大的路径。
    注意:这是所有路径,包括一个叶子节点到另一个叶子节点的路径。
def recursion(root, m):
    if root is None:
        return 0
    left = recursion(root.left, m)
    right = recursion(root.right, m)
    ret = max(left, right, 0) + root.val
    m[0] = max(m[0], ret, left+right+root.val)
    return ret

def maxPathSum(root):
    if root is None:
        return 0
    m = [root.val]
    recursion(root, m)
    return m[0]
  1. 二叉树的最小深度与最大深度【leetcode111、104】
# 以下是二叉树的最小深度的求解
def minDepth(root):
    if root is None:
        return 0
    if root.left is not None:
        if root.right is not None:
            return min(minDepth(root.left), minDepth(root.right)) + 1
        else:
            return minDepth(root.left) + 1
    elif root.right is not None:
        return minDepth(root.right) + 1
    else:
        return 1

#以下是二叉树最大深度的求解
def maxDepth(root):
    return 0 if root is None else max(maxDepth(root.left), maxDepth(root.right))+1
  1. 判断二叉树是否平衡【leetcode110】
    每个节点的左子树与右子树的高度之差至多为1则是平衡二叉树。
def recursion(root, h):
    if root is None:
        h[0] = 0
        return True
    lh, rh = [0], [0]
    if not recursion(root.left, lh):
        return False
    if not recursion(root.right, rh):
        return False
    h[0] = max(lh[0], rh[0]) + 1
    return abs(lh[0] - rh[0]) <= 1

def isBalanced(root):
    return recursion(root, [0])
  1. 判断两个二叉树是否相同【leetcode100】
def isSame(root1, root2):
    if root1 is None:
        return root2 is None
    else:
        if root2 is None:
            return False
        else:
            return root1.val == root2.val and isSame(root1.left, root2.left) and isSame(root1.right, root2.right)
  1. 判断二叉树是否对称【leetcode101】
def recursion(root1, root2):
    if root1 is None:
        return root2 is None
    else:
        if root2 is None:
            return False
        else:
            return root1.val == root2.val and recursion(root1.left, root2.right) and recursion(root2.left, root1.right)

def isSymmetrical(root):
    if root is None:
        return True
    return recursion(root.left, root.right)
  1. 判断二叉树是否为二叉搜索树【leetcode98、173】
    对于任意一个节点,其左子树比它小,其右子树比它大
# 该方法采用中序遍历保存所有值,可优化为只保存一个值,每次去比较即可
def inorderTraversal(root, arr):
    if root is not None:
        inorderTraversal(root.left, arr)
        arr.append(root.val)
        inorderTraversal(root.right, arr)
        
def isSearchTree(root):
    arr = []
    inorderTraversal(root, arr)
    i = 1
    while i < len(arr):
        if arr[i-1] >= arr[i]:
            return False
        i += 1
    return True
直击高频编程考点:树相关知识及经典算法题总结 树相关知识及编程练习总结:背景知识+树的应用举例(Spring中的应用举例+其他框架中的应用举例+实际开发中的应用举例)+相关编程练习(二叉树遍历:包括前序遍历、中序遍历、后序遍历、层序遍历等+二叉树的最大深度+二叉树的最小深度+对称二叉树+二叉树的最近公共祖先+二叉树的直径+二叉树的路径和+二叉搜索树中的插入操作+二叉搜索树中的删除操作+二叉搜索树中的搜索操作+二叉树的层平均值+二叉树的镜像+二叉树的序列化与反序列化+二叉树的右视图+二叉树的最大宽度+前序遍历和中序遍历构造二叉树+平衡二叉树) 阅读详情

相关推荐

【数据结构】-408真题-编程题总结

单链表 【2009】 【2012】 【2015】 【2019】 数组 【2010】https://blog.youkuaiyun.com/qq_39328436/article/details/108555686 考点:循环左移数组 方法:1.全部翻转 2.前面翻转 3.后面翻转 【2011】https://blog.youkuaiyun.com/qq_39328436/article/details/106673506 考点:找两个数组的中位数 方法:归并比较 【2013】https://blog

vector的博客 6471

【王道数据结构】树的编程题(一)

1、编写后序遍历二叉树的非递归算法。 算法思想: void PostOrder(BiTree T) { InitStack(S); p = T; r = NULL; while (p || !IsEmoty(S)) { if (p) { push(S, p); p = p->lchild; } else { GetTop(S, p); if (p->rchild && p->rchild != r) p =

荒唐的博客 1858

数据结构编程题汇总

考研数据结构编程题汇总,计算机专业课数据结构考研编程题汇总

树编程题_剑指offer07_重建二叉树

剑指offer07_重建二叉树 java官解注释

xklx_z的博客 159

如何在OBS中添加实时时间戳:Lua脚本配置教程(附效果展示)

本文详细介绍了如何在OBS中通过Lua脚本配置实时时间戳功能,包括环境准备、脚本获取、安装配置及高级定制。适用于直播和视频录制场景,提供精准回溯和风格自定义,支持多平台适配和性能优化,是专业制作的必备技巧。

day7的博客 1044

AI for Science:GNN预测分子性质全流程详解与工业实践

从分子表示到工业落地,一文掌握图神经网络在药物研发与材料设计中的核心实战近年来,的浪潮正深刻变革着传统科研范式。在药物研发与材料设计领域,作为核心环节,已从传统的实验试错转向基于图神经网络(GNN)的智能计算。本文将深入解析GNN预测分子性质的,涵盖数据准备、模型设计、训练优化到工业部署,并揭秘前沿技术与实战案例。

datacanvas2426的博客 1674

数据结构代码题------树相关day01 序幕

数据结构代码题----树 题目01 已知一颗二叉树,按照顺序存储结构进行存储,设计一个算法,求编号分别i和j的两个节点的最近的公共祖先结点的值。 算法分析 1、首先是对二叉树的顺序结构进行介绍 结合以上的图片描述,对于二叉树中,顺序存储的设计性质如下: 祖先结点的下标为i/2或者j/2 已知一个祖先结点,其儿子结点的下标为i*2 2、寻找最近公共祖先结点 思路: 想象下,现在二叉树的深度非常的大,若i和j分别在不同的子树系统中,若要找到最近的公共祖先结点,要怎么做呢??? 答案 答案每次进行i

brotherand的博客 5083

自抗扰(ADRC)控制原理及控制器设计

自抗扰控制原理以及控制器设计

weixin_43487974的博客 3万+

c++数据结构-树(详细总结附代码,一看就懂)

一棵树是由n(n>0)个元素组成的有限集合,其中:(1)每个元素称为结点(node)(2)有一个特定的结点,称为根结点或树根(root)(3)除根节点外,其余节点能分成m(m>=0)个互不相交的有限集合 T(0)-T(m-1)。其中的每一个子集都是一个树,这些集合被称为这棵树的子树。

我的博客 8947

单窗算法的地表温度反演:谷歌地球引擎GEE代码

该论文基于Statistical Mono-Window(SMW)算法,对地表温度加以求解。其中,简单地说,SMW算法即是通过简单的线性关系,对由单热红外波段所得的大气表观亮温与地表温度之间的经验关系加以表示,从而计算得到LST。

2301_78834737的博客 553

中断向量表配置不当引发Default_Handler死循环问题解析

本文深入解析STM32开发中因中断向量表配置不当导致的Default_Handler死循环问题。以STM32F407VET6为例,详细阐述中断向量表的工作原理、常见触发场景及系统化排查方法,并提供使用STM32CubeMX的正确姿势和手动配置的注意事项,帮助开发者快速定位并解决这一常见难题。

grafana6viz的博客 179

7.力扣2018年常见编程题总结(树)

1.给定一个二叉搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。 解:要求找第k个最小的元素,即需要对树进行遍历排序,中序遍历元素得到的结果即为二叉搜索树的排序好的结果,因此采用中序遍历,每遍历一次都保存下父结点并且遍历k次。 代码: #include <iostream> #include<queue> #include<vec...

u011441044的博客 482

红外通信不止遥控器:手把手教你用2ASK调制实现语音+温度数据同传

本文详细介绍了如何利用2ASK调制技术实现红外通信系统,同时传输语音和温度数据。通过STM32F103C8T6微控制器和DS18B20温度传感器的硬件设计,结合2ASK调制原理,展示了系统的完整实现方案。文章还提供了调试优化建议,适合电子爱好者和通信工程学生实践学习。

weixin_42531588的博客 388

7-6-Root of AVL Tree-编程题

7-6-Root of AVL Tree-编程题解题代码测试结果问题整理 解题代码 #include<stdio.h> #include<stdlib.h> typedef struct tnode* ptn; struct tnode { int data; ptn left, right; int height; }; ptn CreatTree(int K); ...

Aruasg的博客 225

2026年全国青少年信息素养大赛复赛真题(算法应用主题赛C++初中组:带解析)(7月4日试卷一)【文末附答案和解析】

2026年全国青少年信息素养大赛复赛真题(算法应用主题赛C++初中组:带解析)(7月4日试卷一)【文末附答案和解析】

王老师青少年编程 1736

拓竹P1S封神玩法|AI图生3D+精准修改全攻略,打孔/挖盖再也不用瞎琢磨!

AI图生3D建模结合后期修改,让拓竹P1S用户轻松实现创意打印。文章详细介绍了从照片拍摄、AI模型生成到后期修改的全流程:使用腾讯混元3D或Tripo3D快速生成3D模型,通过Blender或Fusion360进行精准打孔、挖盖子等修改,最后在OrcaSlicer中优化切片参数适配P1S打印。重点解决了AI模型无法直接打印的问题,提供了壁厚控制、孔径调整等实用技巧,并针对常见打印问题给出解决方案,帮助新手实现从AI生成到成品打印的无缝衔接。

2501_93651177的博客 1877

程序员面试刷编程题题型及对应思路

本文将列举程序员面试中常见的编程题题型和对应的解题思路,以供大家备考和练习,提高面试技能。

Cluluxiu的博客 686

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

uva10562——看图写树(树的先序遍历!)

妈蛋,这题坑了我2个多小时。。终于过了。。 做的时候主要在这几个WA点卡住了: 1.读取行数的时候忘记减去“#”的行数了 2.没有考虑到空树的情况 3.递归的时候没有判断右边界值‘\0’ 4.被样例误导了,以为节点只能是字母。。。。。。一个发现: 用 isspace() 或者 isalpha() 比手动判断要快! 本题解法: 在读取到节点的时候,如果发现下面有字符‘|’,把此节点当作根

希望更好 792

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数据结构-C语言版本(五)树

树是一种非线性的分层数据结构,由节点和边组成。

qq_43470128的博客 552

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

电子科技大学Icoding编程题解析与学习笔记

链表和顺序表是数据结构的基础,常见的操作包括查找、删除、合并等。在链表倒数查找题目中,可以使用快慢指针技巧,快指针先走n步,然后两个指针同时移动,当快指针到达末尾时,慢指针指向的就是倒数第n个节点。树转二叉树时,要注意将每个节点的第一个孩子作为左孩子,右兄弟作为右孩子的规则。平台提供了完整的开发环境,无需配置即可直接运行代码,特别适合算法和数据结构的实验验证。:对于复杂的数据结构,可以先在纸上画出结构图,再对照编写代码。:思考不同实现方式的时间复杂度和空间复杂度,选择最适合当前问题的解决方案。

GreenLeaf78的博客 841

【烈日炎炎战后端】编程题总结(13.3万字)

这里写目录标题专题总结【代码规范】【树】<序>1 [二叉树的前、中、后序遍历(递归) ](https://leetcode-cn.com/problems/binary-tree-inorder-traversal)2 [二叉树的前、中、后序遍历(非递归) ](https://leetcode-cn.com/problems/binary-tree-inorder-traversal)3 二叉树的层次遍历(BFS)4 [**合并二叉树** ](https://leetcode-cn.

徐明晓的博客 1148

python数组面试_聊聊我的一次真实 Python 面试经历

原标题:聊聊我的一次真实 Python 面试经历 首先我挺喜欢这家公司的面试风格的,也是比较务实的吧。无奈自己的心理因素和技术水平都不好,导致面试失败。再接再厉吧1.一上来就是编程题三连1.1 大概意思就是:俩列表a b,如果a中的元素在b中,那么就保存此元素在a中的索引值,最后统一输出所有索引值。要求:时间复杂度小于O(n) 这个我当时想到的是循环遍历a,然后判断是否i in b,但是这个时间复...

weixin_39846378的博客 117

【编程题】7-3 树的同构

判断二叉树的同构,其解决方法与判断二叉树是否相同类似,并且天然地可以使用递归的解法解决。关于树与二叉树的问题,如果可以用迭代解决的优先选择迭代,不过有时候迭代的思路并不好想,或者迭代的思路很复杂,那么使用递归解决就好。

木又可可的博客 1222

盘点互联网公司最常见的面试编程题

点击上方“Python与算法社区”,选择“星标”公众号第一时间速享原创干货1突破编程题互联网公司面试,笔试环节或第一面往往都是现场做编程题。很多面试的老铁反映说,败在了...

算法channel 4219

Java笔试常见编程题,你值得拥有

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!

2301_81749759的博客 1018

数据结构中链表、树、图相关编程题笔记

一、结构体 数据结构中结构体很重要,所以先了解结构体相关知识点。 struct LNode{ int data; char name[20]; }; //struct是定义结构体的关键字,LNode是结构体的名称 //如为上个结构体创建一个对象——struct LNode n; //这里创建对象必须加上结构体关键字struct。n就是对象了,可直接使用 struct LNode{ int data; char name[20]; }n; //这是在定义的时候创建了对象n typedef st

weixin_42684368的博客 1372
上一篇: 有环单链表,求环长、链长;求两链表的交点
下一篇: 用于神经网络的图像数据预处理(Image Data Pre-Processing for Neural Networks)【翻译】
Subson
博客等级 码龄12年 31粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值