小木的算法日记-多叉树的递归/层序遍历

高级数据结构及算法:树的遍历 文章目录1. 多叉树遍历1.1 深度优先遍历先序遍历后序遍历1.2 广度优先遍历2. 二叉树遍历2.1 深度优先遍历先序遍历后序遍历中序遍历 1. 多叉树遍历 图形演示 1.1 深度优先遍历 深度优先遍历:从根节点开始先沿着树的一个枝遍历到叶子节点,再遍历其他的枝。深度优先遍历又分为先序遍历和后序遍历 先序遍历 上图树的先序遍历结果:A → B → D → G → H → I → C → E → J → F 递归深度优先遍历:先序遍历 以 力扣589题:叉树的前序遍历 为例 /* // Definitio 阅读详情


🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术

🚀 引言

你好,未来的算法大神!

在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它简洁、优雅,是许多复杂算法的基石。但现实世界的问题往往更加复杂:一个公司的组织架构、一个操作系统的文件目录……这些都不是简单的“一生二”就能描述的。

这时,多叉树(N-ary Tree) 和 森林(Forest) 便登上了舞台。

这篇文章将带你完成一次平滑的认知升级:

  1. 理解:从二叉树到多叉树,再到森林,它们之间究竟是什么关系?

  2. 掌握:如何将二叉树的遍历思想(DFS 和 BFS)优雅地迁移到多叉树上?

  3. 精通:学习层序遍历的三种核心写法,从入门到精通,并理解其背后的设计哲学。

准备好了吗?让我们一起开始这场探索树木深处奥秘的旅程吧!


🧐 概念解析:从二叉到多叉,再到森林

在深入遍历之前,我们先花一分钟理清这几个概念的关系。

核心思想:多叉树是二叉树概念的自然延伸,而森林则是多叉树的集合。

1. 二叉树 (Binary Tree)

每个节点最多只有两个子节点,通常称为 left(左子节点)和 right(右子节点)。

      # 二叉树的节点定义
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
    

2. 多叉树 (N-ary Tree)

每个节点可以拥有任意数量的子节点。我们通常用一个列表 children 来存储所有子节点。

      # 多叉树的节点定义
class Node:
    def __init__(self, val=0, children=None):
        self.val = val
        # 如果不提供 children,则默认为一个空列表
        self.children = children if children is not None else []
    

3. 森林 (Forest)

顾名思义,森林就是多棵树的集合。从结构上看,一片森林可以看作是一个包含了多个多叉树根节点的列表。有趣的是,一棵多叉树本身,也可以被视作一个只有一个成员的特殊森林。


🧭 深度优先遍历 (DFS):递归的思想精髓

DFS 的核心是“一路走到底,再回头”。递归是实现 DFS 最自然的方式。让我们用一个绝妙的比喻来理解它——探索房间与钥匙。

二叉树的探索之旅

想象你进入了一座由房间构成的迷宫,每个房间最多有两扇门,分别由“左钥匙”和“右钥匙”打开。

      # 二叉树的遍历框架
def traverse_binary_tree(root: TreeNode):
    if root is None:
        return # 门后是空的,返回
    
    #  azioni 前序位置: 刚进入房间,还没开新门
    print(f"前序:到达房间 {root.val}")
    
    traverse_binary_tree(root.left) # 用左钥匙,探索左边的分支
    
    #  azioni 中序位置: 从左边分支回来,准备去右边
    print(f"中序:探索完 {root.val} 的左侧")
    
    traverse_binary_tree(root.right) # 用右钥匙,探索右边的分支
    
    #  azioni 后序位置: 左右都探索完毕,准备离开这个房间
    print(f"后序:离开房间 {root.val}")
    

  • 前序位置:刚进入房间,立即执行的操作。

  • 中序位置:探索完左边所有房间,准备去右边之前执行的操作。

  • 后序位置:左右两边的房间都探索完毕,离开当前房间前执行的操作。

多叉树的探索升级

现在,迷宫升级了!每个房间里不再是固定的两把钥匙,而是一把钥匙串 children,上面挂着通往所有下一级房间的钥匙。

      # N 叉树的遍历框架
def traverse_n_ary_tree(root: Node):
    if root is None:
        return # 门后是空的,返回
        
    #  azioni 前序位置: 刚进入房间,还没用任何一把钥匙
    print(f"前序:到达房间 {root.val}")

    for child in root.children: # 依次使用钥匙串上的每一把钥匙
        traverse_n_ary_tree(child)
        
    #  azioni 后序位置: 所有子房间都探索完毕,准备离开
    print(f"后序:离开房间 {root.val}")
    

核心区别:

  • 二叉树是固定的 left 和 right,所以有中序位置。

  • 多叉树是通过 for 循环遍历所有子节点,因此天然地只有前序和后序位置。前序在循环前,后序在循环后。


🗺️ 层序遍历 (BFS):逐层扫描的广度智慧

BFS 像是在水面投下一颗石子,涟漪从中心一圈一圈地向外扩散。它不深入,而是先扫遍同一层的所有节点。实现 BFS 的利器是队列(Queue)。

下面,我们将通过三种方案,层层递进,彻底掌握多叉树的层序遍历。

方案一:基础版 - 只求遍历,不问出处

这是最纯粹的层序遍历,目标仅仅是按层次顺序访问到每个节点,不关心它在哪一层。

      from collections import deque

def level_order_simple(root: Node):
    if root is None:
        return
    
    q = deque([root]) # 初始化队列,放入根节点
    
    while q:
        cur = q.popleft() # 从队列头部取出一个节点
        
        # 访问当前节点
        print(f"访问到节点: {cur.val}")
        
        # 将其所有子节点加入队列尾部
        for child in cur.children:
            q.append(child)
    

优点:代码简洁,逻辑清晰。
缺点:无法知道当前节点所在的深度。

方案二:进阶版 - 巧用 size 记录层数

如果我们想在遍历时知道每个节点位于第几层,怎么办?答案是:在每一轮循环中,只处理当前层的所有节点。

      from collections import deque

def level_order_with_depth_v1(root: Node):
    if root is None:
        return

    q = deque([root])
    depth = 1 # 根节点视为第 1 层

    while q:
        # 关键:在循环开始前,记录当前队列大小,即当前层的节点数
        level_size = len(q)
        print(f"--- 开始处理第 {depth} 层,该层有 {level_size} 个节点 ---")
        
        for i in range(level_size):
            cur = q.popleft()
            print(f"  depth = {depth}, val = {cur.val}")

            for child in cur.children:
                q.append(child)
        
        # 当前层处理完毕,深度加一
        depth += 1
    

图解示例:
假设我们有如下三层树:

      1 (根)
    / | \
   2  3  4
  /|\
 5 6 7
    

遍历过程:

  1. 初始: q = [1], depth = 1。

  2. 第一次 while: level_size = 1。

    • 处理节点 1,将其子节点 [2, 3, 4] 入队。

    • q 变为 [2, 3, 4]。

    • depth 变为 2。

  3. 第二次 while: level_size = 3。

    • 处理节点 2,将其子节点 [5, 6, 7] 入队。

    • 处理节点 3, 4 (无子节点)。

    • q 变为 [5, 6, 7]。

    • depth 变为 3。

  4. 第三次 while: level_size = 3。

    • 处理节点 5, 6, 7。

    • q 变为空,循环结束。

这种写法的优势在于:

  • 明确分层:for 循环天然地将每一层的节点处理逻辑框在一起。

  • 批量处理:便于对每一层进行统计,如计算层和、找到层最大值等。

方案三:终极版 - State 对象,捆绑节点与深度

有时候,我们希望信息能够随着节点在队列中传递,而不是依赖外部变量。这时,我们可以引入一个 State 类。

比喻时间:快递员与行李牌

想象你是一个快递员,在一个树状小区里送货。

  • Node:是收件地址(房间)。

  • State:是贴在包裹上的“行李牌”,上面清晰地写着 收件地址(Node) 和 楼层号(depth)。

这样,无论包裹传到谁手里,信息都不会丢失。

      from collections import deque

# “行李牌”类,捆绑节点和它所在的深度
class State:
    def __init__(self, node: Node, depth: int):
        self.node = node
        self.depth = depth

def level_order_with_depth_v2(root: Node):
    if root is None:
        return

    q = deque([State(root, 1)]) # 把贴好行李牌的根节点包裹放入队列

    while q:
        # 取出队列中的第一个包裹
        current_state = q.popleft()
        
        node = current_state.node
        depth = current_state.depth
        
        # 查看行李牌信息,并进行处理
        print(f"depth = {depth}, val = {node.val}")

        # 为所有子节点制作新的行李牌(深度+1),并放入队列
        for child in node.children:
            q.append(State(child, depth + 1))
    

为什么这种写法很重要?
虽然在这个场景下,方案二看起来更简洁,但 State 模式的思想* 当问题变得更复杂时,比如在著名的 Dijkstra 或 A 算法中,节点需要携带的就不仅仅是深度,可能还有“从起点到此的成本”等更多信息。State 类提供了一个完美的框架来封装这些状态。


✨ 总结

恭喜你,坚持看到了最后!现在,让我们快速回顾一下今天学到的核心知识:

  1. 从二叉到多叉:多叉树是二叉树的泛化,遍历逻辑从处理固定的 left/right 变成了 for 循环处理 children 列表。

  2. DFS (深度优先):使用递归,代码优雅,有前序和后序两个关键操作位置,适合“一条路走到黑”的场景。

  3. BFS (广度优先):使用队列,逐层扫描,适合寻找最短路径等场景。我们掌握了三种实现方式:

    • 基础版:最简单,但无法获知深度。

    • size 进阶版:巧妙地按层处理,能记录深度,是面试高频写法。

    • State 终极版:将节点与状态(如深度)绑定,扩展性极强,是通向更高级算法的钥匙。

理论是舟,实践是海。现在,打开你的编辑器,用今天学到的知识去 LeetCode 上征服几道多叉树的题目吧!你会发现,世界豁然开朗。

人之道损不足而利有余,天之道损有余而利不足。

gem5 prefetcher 最近在gem5上做预取实验,添加自己的预取算法,这里采用hardware stream prefetcher , 修改了几个bug才给实验调试通过,发文记录下实验过程。 gem5上添加自己的预取算法步骤: (1)路径gem5-master/configs/common/Caches.py下,开启预取:class L1Cache(Cache): assoc = 2 tag_late 阅读详情

相关推荐

北航论文模板:解决XeLaTeX中Font shape'TU/SimSun(1)/b/n' undefined(font) using 'TU/SimSun(1)/m/n' instead

北航论文模板:解决XeLaTeX中Font shape ‘TU/SimSun(1)/b/n’ undefined(font) using ‘TU/SimSun(1)/m/n’ instead 问题 问题描述: 在使用北航论文模板时,产生了warning:Font shape 'TU/SimSun(1)/b/n' undefined(font) using 'TU/SimSun(1)/m/n' i...

qq_39560620的博客 1万+

多叉树的遍历

429. N叉树的层序遍历 给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。 返回其层序遍历: [ [1], [3,2,4], [5,6] ] 说明: 树的深度不会超过 1000。 树的节点总数不会超过 5000。 class Solution { public: vector<vector<int>> levelOrder(Node* root) { //特判 if(root ==

qq_41342326的博客 7575

打造会自主学习的 AI 助手:OpenClaw 记忆系统完全指南

这不是科幻,这是我正在使用的系统。我的 AI 助手「小琳」已经运行了一段时间,积累了大量的知识和经验,而且还在不断学习成长。心跳(Heartbeat)是 OpenClaw 的定时轮询机制,可以让 AI 主动做一些事情。你有没有遇到过这样的困扰:每次和 AI 对话,它都像失忆了一样,之前聊过的内容完全不记得?设置定时任务:每天早上 8 点,查询天气和热点新闻,通过钉钉推送给我。让你的 AI 助手拥有持久记忆,能够自主学习、总结经验、不断成长。这不仅仅是一个「能记住事情的 AI」,而是一个。

Honmaple的博客 1633

算法实战——多叉树全路径遍历

本文为原创作品,首发于微信公众号:【坂本先生】,如需转载请在文首明显位置标明“转载于微信公众号:【坂本先生】”,否则追究其法律责任。 微信文章地址:实战算法——多叉树全路径遍历 前言 本文研究的是如何对一个多叉树进行全路径的遍历,并输出全路径结果。该问题的研究可以用在:Trie树中查看所有字典值这个问题上。本文将对该问题进行详细的模拟及进行代码实现,讨论了递归和非递归两种方法优劣并分别进行实现,如...

weixin_34227447的博客 1478

信道估计之MMSE算法

信道估计之MMSE算法前言MMSE估计的原理总结 前言        前篇分析了LS信道估计算法,也说明了由于没有考虑SNR的影响,所以LS算法不适合在低信噪比的情况下使用。本篇来学习信道估计的另外一种常用的算法–MMSE。        为什么说LS没有考虑噪声大小的情况呢,因为LS算法使用的是实际观测量与估计观测量的误差,这并不能精确的代表估计量的真值与估计值的误

大白的博客 2万+

基于大模型的肾结石诊疗全流程风险预测与方案制定研究报告

目录一、引言1.1 研究背景与意义1.2 国内外研究现状1.3 研究目标与内容二、大模型技术原理与应用概述2.1 大模型的基本原理2.2 大模型在医疗领域的应用进展2.3 适用于肾结石预测的大模型选择与依据三、术前风险预测与准备3.1 患者身体状况评估3.2 结石情况分析3.3 术前准备方案制定四、术中风险预测与应对4.1 出血风险预测与处理4.2 脏器损伤风险预测与预防4.3 实时监测与决策支持五、术后恢复预测与护理5.1 恢复时间预测5.2 护理要点与措施5.3 并发症预防与处理六、并发症风险预测与管理

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1148

三、高级数据结构和算法:树的遍历

树的遍历(递归和迭代)

小脑斧的博客 1748

Mem0 vs LangMem vs Letta:三大AI记忆框架实战对比(附代码示例)

本文深入对比了Mem0、LangMem和Letta三大AI记忆框架的核心特性与适用场景。Mem0提供开箱即用的记忆管理服务,适合快速集成;LangMem深度融入LangGraph生态,适合复杂工作流;Letta则采用虚拟内存系统,旨在突破上下文窗口限制。文章通过实战代码示例,为开发者选择适合其业务需求的AI记忆解决方案提供了清晰指南。

g9h0i1的博客 679

多叉树学习笔记

多叉树作为一种常见的树形数据结构,在计算机科学中有着广泛的应用。我们可以使用深度优先遍历或广度优先遍历来遍历多叉树。

m0_72410588的博客 1297

两个独立的正态分布的和仍然为正态分布的证明

正态分布的和

weixin_40064300的博客 1万+

Orin 10G PHY网络分析

由于调试用的10G PHY,所以整理下分析过程; 1.从Orin devkit 丝印来看RJ45 对应J17 通过搜索 MGBE_PHY_A_N 找到连接的10G PHY, 原理图上标明了MDIO address 为0x0, 使用的PHY 芯片为 Marvel 的AQR113C, 主要特性: 架构: 关键特征: MDC 连接了GPIO26_XFI0_MDC; MDIO 连接了GPIO25_XFI0_MDIO; 通过pinmux_config映射表也可以..

乐于分享 5657

多叉树、森林

目录 一,二叉树 二,多叉树 三,森林 一,二叉树 二叉树https://blog.youkuaiyun.com/nameofcsdn/article/details/114459069 满二叉树、Full Binary Tree、Perfect Binary Treehttps://blog.youkuaiyun.com/nameofcsdn/article/details/114559547 完全二叉树https://blog.youkuaiyun.com/nameofcsdn/article/details/...

nameofcsdn的博客 2304

使用HART Server PC软件进行HART设备的组态、调试和分析的完整指南

HART协议是一种用于工业自动化中的双向通信协议,能够在4-20mA模拟信号的基础上叠加数字信号,从而实现设备的远程监控和管理。HART协议兼具模拟和数字通信的优点,被广泛应用于过程控制系统中。设备组态:通过软件可以对HART设备进行组态,配置设备参数。设备调试:支持设备的在线调试和故障诊断,方便快速解决问题。数据分析:提供设备运行数据的实时监控和历史数据分析功能。报表生成:支持生成各类报表,便于数据记录和管理。

qq_38334677的博客 2469

小木的算法日记-DFS和BFS的适用场景(深度和广度)

先介绍一下二叉树的这两个常见的算法,DFS算法(递归)以及BFS算法(层序)。DFS常用来进行穷举所有路径,而BFS算法常用来寻找最短路径。比如给你出个问题,让你求最短路径,那么接下来让我们看看用DFS算法与BFS算法求的区别在哪里?DFS递归遍历算法:(一条路走到黑,遍历完一个树枝再遍历另外一个树枝)BFS层序遍历算法--逐层扩散(搜完1层搜1层而不是像D那样搜完一个树枝再搜另一个)BFS相比于DFS更适合寻找。

GetOver_的博客 1087

android 蓝牙通讯demo

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

N叉树的三种遍历

文章目录什么是N叉树N叉树的层序遍历 本博客使用的案例全部来自力扣,并且是由花花酱整理的力扣题 什么是N叉树 N叉树和二叉树的区别就在于:N叉树一个父节点可以拥有多个子节点,而二叉树一个负节点只可以拥有左右两个子节点 N叉树如图所示 N叉树的层序遍历 本题来自力扣429. N 叉树的层序遍历 层序遍历就是将树进行父子分层,然后从腐恶层遍历到子层,并且是从左到右遍历。 因此下图的分层结果是 1 234 56 仔细思考,我们可以使用队列的方法来解决。 我们先将头节点放入队列中 然后将头节点抛出,使用

Shea_Qiu的博客 3963

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

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

【数据结构】多叉树的深度优先遍历DFS和广度优先遍历BFS(含C++递归和非递归方式实现)

本文主要讲解多叉树的遍历,并附有相关代码。

weixin_50941083的博客 6062

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

多叉树遍历 java_【LeetCode】429.N叉树的层序遍历(图文详解,三种方法,java实现)...

题目分析方法一:利用队列实现广度优先搜索我们要构造一个 sub-lists 列表,其中每个 sub-list 是树中一行的值。行应该按从上到下的顺序排列。因为我们从根节点开始遍历树,然后向下搜索最接近根节点的节点,这是广度优先搜索。我们使用队列来进行广度优先搜索,队列具有先进先出的特性。在这里使用栈是错误的选择,栈应用于深度优先搜索。让我们在树上使用基于队列的遍历算法,看看它的作用。这是你应该记住...

weixin_35559171的博客 1256

数据结构与算法——二叉树,多叉树的递归遍历、层序遍历,DFS与BFS

二叉树的先序、中序、后序递归遍历,借助队列实现3种层序遍历;多叉树的深度优先与广度优先遍历

m0_74556076的博客 527

多叉树的递归/层序遍历

这是物理结构的改变。二叉树:写死两个指针,left和right。多叉树:不知道有几个孩子,所以用一个列表来装。多叉树遍历是一个中间态。向左看(基础):它是二叉树遍历的通用化。向右看(进阶)图的 DFS:就是多叉树 DFS 加上visited集合。图的 BFS:就是多叉树 BFS 加上visited集合。回溯算法:就是多叉树的前后序遍历(做选择 -> 递归 -> 撤销选择)。

qq_61346813的博客 599

python循环构建多叉树、python全路径遍历多叉树

一、全路径遍历多叉树 一般多叉树遍历有两种方法,先序遍历和后序遍历,这两种遍历方法每个节点只访问一遍,但我的情况是想要得到每一条从根节点到叶子节点的路径。 多叉树的数据结构及从根节点到叶子节点的遍历算法如下:二、自动构建多叉树 实际不可能手动构建而需要根据如下表自动构建多叉树,循环构建多叉树的代码如下:

Fan-Yan的博客 1940

数据结构与算法(十四)之多叉树

文章目录实现索引的方法B树b树的搜索b树的添加上溢b树的删除下溢B+树B+树的构建 实现索引的方法 使用hashmap实现索引就不能实现范围查询。 使用红黑树实现索引会存在树太高的情况,因为每查找一层就需要向磁盘发起一次请求,导致io消耗过大,消耗时间长,而且磁盘每个block是4k,使用红黑树存在空间浪费的现象。 这时候就需要更优的数据结构来存储数据,其中B树,B+树,B*树便是很好的一个选...

qq_38783257的博客 1739

多叉树的 前序、后序、层序遍历,非递归

1、描述 590给定一个 N 叉树,返回其节点值的后序遍历。 2、关键字 N叉树,后序遍历 3、思路 前序遍历,stack, 思考前序遍历是:根左右,后序遍历是:左右根 如果把后序遍历根节点和孩子节点倒过来,就是和前序遍历类型一样了。而前序遍历是:左右, 后序遍历是右左,所以在处理孩纸节点时候,用stack暂存当前节点的孩子节点,输出逆置答案时,把stack弹出就好了, 4、notes 1、前序遍历就是队列,层序遍历也是队列,后序遍历就是用栈暂存逆序,最后结果序列再逆置一下 2、层序遍历是取第一个元素,把

Tlwhisper的博客 1169

多叉树的前序遍历_【算法】二叉树、N叉树先序、中序、后序、BFS、DFS遍历的递归和迭代实现记录(Java版)...

本文总结了刷LeetCode过程中,有关树的遍历的相关代码实现,包括了二叉树、N叉树先序、中序、后序、BFS、DFS遍历的递归和迭代实现。这也是解决树的遍历问题的固定套路。一、二叉树的先序、中序、后序遍历1、递归模板(1)先序1 public voidpreorder(TreeNode root) {2 if (root == null) {3 return;4 }5 res....

weixin_35705784的博客 775

关于多叉树的遍历。

经过了一番查询与思考。目前把平常见的Tree的遍历分成3种情况。 递归遍历。非递归广度优先遍历。非递归深度优先遍历。 事实上,递归遍历属于深度优先遍历的一种。因为这种遍历都是基于栈 数据结构来做运算的。遵循先进后出的原则。 所以在广度上不会被先照顾到,而是后来的,逐渐深入的子节点最新出栈。 而非递归广度优先去遍历一个多叉树要用到 队列 这个东西。 目前java 的linkedList 实现了Qu...

u012196940的博客 2816

树(多叉树)的建立、遍历、翻转

昨天帮朋友做网易的笔试题(吐槽一下网易的题目有点变态),遇到了一道翻转树的题,于是抽空做了一下。 翻转树的结构,如果在层序遍历时将孩子数组翻转输出并没有改变树的结构,当然你可以先这样输出再建树,这样做会比较麻烦,正确的做法是需要递归翻转每个孩子数组。 void MTree::init(MNode *root) { this->root = root; } MNode* MTree::getNode() { return root; } void MTree::putC

Alpaca Roy的博客 819

结构与算法(05):二叉树与多叉树

数组存储是通过下标方式访问元素,查询速度快,如果数组元素是有序的,还可使用二分查找提高检索速度;如果添加新元素可能会导致多个下标移动,效率较低;链表存储元素,对于元素添加和删除效率高,但是遍历元素每次都需要从头结点开始,效率特别低;树形结构能同时相对提高数据存储和读取的效率。...

【积累】,是一个长期持续的过程。 1384
上一篇: 小木的算法日记-DFS和BFS的适用场景(深度和广度)
下一篇: 小木的算法日记-亲手揭秘 TreeMap/TreeSet 背后的魔法 —— 二叉搜索树
木旭林晖
博客等级 码龄2年 159粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值