【数据结构】 顺序、链式存储结构的森林递归遍历、层次遍历求高度

KEPServerEX中,别名映射(Alias Mapping)数据标签重命名机制 目录核心机制应用场景配置步骤技术特性与参考内容的差异KEPServerEX中,别名映射(Alias Mapping) 是一种数据标签重命名机制,主要用于简化复杂标签路径的调用或实现跨系统兼容。其核心逻辑和功能如下:路径抽象 将设备层级结构中的完整标签路径(如 Channel1.Device1.Tag1)映射为简短别名(如 TempSensor1),降低客户端调用的复杂度。动态绑定 别名与实际标签实时关联,数据更新和读写操作通过别名直接传递到底层物理标签,无需修改客户端配置。多对一映射支持多个别名指向 阅读详情

降维问题:顺序、链式存储结构的二叉树递归遍历、层次遍历求高度
全部源代码在最后

一、概要设计

测试数据:如图所示森林
在这里插入图片描述
森林采用兄弟孩子链表表示法。
森林的数据输入采取输入兄弟孩子链表表示法下的等价二叉树的扩展先序遍历形成的线性串的方法(原理为森林先序遍历结果与等价二叉树的先序遍历结果相同)
在这里插入图片描述
输入数据:ABEK..F..CG..DH.I.J...L.MN...

算法设计

以链式存储结构为例
递归遍历求高度:由于孩子兄弟链表表示法是把兄弟当儿子,所以对应二叉树的所有左子树的最大高度便是森林的高度。这样,在求二叉树高度的算法上可以改进,将左子树给定权重1,右子树给定权重0;即只需

if(root == NULL) return 0;
return max(GetHeightByRecursion(root->firstson) + 1, GetHeightByRecursion(root->nextbrother));

层次遍历求高度:利用队列,将第一个儿子入队,再进行一系列循环操作

实验结果

在这里插入图片描述

二、 详细设计

1. 链式存储结构

  • 森林链表
template<typename T>
struct ForestNode
{
	T data;
	ForestNode<T>* firstson;
	ForestNode<T>* nextbrother;
	ForestNode()
	{
		firstson = NULL;
		nextbrother = NULL;
	}
};
  • 森林类
template<typename T>
class Forest
{
public:
	Forest() {};
	~Forest(){};
	ForestNode<T>* getFirstTreeRoot(){};
	void build(ForestNode<T>* & node){};
	void deleteAll(ForestNode<T>* node){};
	int LevelTraversalAndReturnHeight(ForestNode<T>* root){};
	int GetHeightByRecursion(ForestNode<T>* root){};
private:
	ForestNode<T>* FirstTreeRoot;
};
  • 构造函数
 Forest() 
	{
		FirstTreeRoot = new ForestNode<T>;
	};
  • 析构函数
 ~Forest()
	{
		deleteAll(FirstTreeRoot);
	}
  • 获得第一个根结点
ForestNode<T>* getFirstTreeRoot() { return FirstTreeRoot; };
  • 通过输入先序拓展遍历序列递归建立森林
void build(ForestNode<T>* & node)
	{
		T nodedata;
		nodedata = cin.get();
		if (nodedata == '.')
		{
			node = NULL;
			return;
		}
		node = new ForestNode<T>;
		node->data = nodedata;
		build(node->firstson);
		build(node->nextbrother);
	}
  • 删除子树
void deleteAll(ForestNode<T>* node)
		{
			if (node == NULL) return;
			deleteAll(node->firstson);
			deleteAll(node->nextbrother);
			delete node;
		}
  • 层次遍历并返回高度
int LevelTraversalAndReturnHeight(ForestNode<T>* root)
	{
		queue<ForestNode<T>*> Queue;
		Queue.push(root);
		int height = 0;
		while (Queue.size() != 0)
		{
			cout << "level" << height + 1 << ":";
			int len = Queue.size();
			ForestNode<T>* node;
			for (int i = 1; i <= len; i++)
			{
				node = Queue.front();
				Queue.pop();
				while (node != NULL)
				{
					cout << node->data << " ";
					if (node->firstson != NULL) Queue.push(node->firstson);
					node = node->nextbrother;
				}
				cout << "   ";
			}
			cout << endl;
			height++;
		}
		return height;
	}
  • 递归遍历求高度()
int GetHeightByRecursion(ForestNode<T>* root)
	{
		if(root == NULL) return 0;
		return max(GetHeightByRecursion(root->firstson) + 1, GetHeightByRecursion(root->nextbrother));
	}

2.顺序存储结构

template<typename T>
class SeqForest
{
public:
	SeqForest(int totalnum)
	{
		if (totalnum > 0)
		{
			this->totalnum = totalnum;
			array = new T[totalnum + 1];
			memset(array, ' ', (totalnum + 1) * sizeof(T));
		}
	}
	~SeqForest()
	{
		delete[]array;
	}
	void build(int index = 1)
	{
		T data;
		data = cin.get();
		if (data == '.'||index>totalnum) return;
		array[index] = data;
		build(2 * index);
		build(2 * index + 1);
	}
	int GetHeightByRecursion(int i = 1)
	{
		if (i> totalnum || array[i] == ' ') return 0;
		return max(GetHeightByRecursion(2 * i) + 1, GetHeightByRecursion(2 * i + 1));
	}
	int LevelTraversalAndReturnHeight(int i = 1)
	{
		queue<int> Queue;
		Queue.push(i);
		int height = 0;
		while (!Queue.empty())
		{
			cout << "level" << ++height << ":";
			int len = Queue.size();
			for (int j = 1; j <= len; j++)
			{
				int index = Queue.front();
				Queue.pop();
				while (array[index] != ' ')
				{
					if (array[2 * index] != ' ') Queue.push(2 * index);
					cout << array[index] << " ";
					index = 2 * index + 1;
				}
			}
			cout << endl;
		}
		return height;
	}
private:
	int totalnum;
	T* array;
};

三、全部源代码

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;

//顺序存储结构
template<typename T>
class SeqForest
{
public:
	SeqForest(int totalnum)
	{
		if (totalnum > 0)
		{
			this->totalnum = totalnum;
			array = new T[totalnum + 1];
			memset(array, ' ', (totalnum + 1) * sizeof(T));
		}
	}
	~SeqForest()
	{
		delete[]array;
	}
	void build(int index = 1)
	{
		T data;
		data = cin.get();
		if (data == '.'||index>totalnum) return;
		array[index] = data;
		build(2 * index);
		build(2 * index + 1);
	}
	int GetHeightByRecursion(int i = 1)
	{
		if (i> totalnum || array[i] == ' ') return 0;
		return max(GetHeightByRecursion(2 * i) + 1, GetHeightByRecursion(2 * i + 1));
	}
	int LevelTraversalAndReturnHeight(int i = 1)
	{
		queue<int> Queue;
		Queue.push(i);
		int height = 0;
		while (!Queue.empty())
		{
			cout << "level" << ++height << ":";
			int len = Queue.size();
			for (int j = 1; j <= len; j++)
			{
				int index = Queue.front();
				Queue.pop();
				while (array[index] != ' ')
				{
					if (array[2 * index] != ' ') Queue.push(2 * index);
					cout << array[index] << " ";
					index = 2 * index + 1;
				}
			}
			cout << endl;
		}
		return height;
	}
private:
	int totalnum;
	T* array;
};
//链式存储结构
template<typename T>
struct ForestNode
{
	T data;
	ForestNode<T>* firstson;
	ForestNode<T>* nextbrother;
	ForestNode()
	{
		firstson = NULL;
		nextbrother = NULL;
	}
};
template<typename T>
class Forest
{
public:
	Forest() 
	{
		FirstTreeRoot = new ForestNode<T>;
	};
	~Forest()
	{
		deleteAll(FirstTreeRoot);
	}
	ForestNode<T>* getFirstTreeRoot() { return FirstTreeRoot; };
	void build(ForestNode<T>* & node)
	{
		T nodedata;
		nodedata = cin.get();
		if (nodedata == '.')
		{
			node = NULL;
			return;
		}
		node = new ForestNode<T>;
		node->data = nodedata;
		build(node->firstson);
		build(node->nextbrother);
	}
		void deleteAll(ForestNode<T>* node)
		{
			if (node == NULL) return;
			deleteAll(node->firstson);
			deleteAll(node->nextbrother);
			delete node;
		}
	int LevelTraversalAndReturnHeight(ForestNode<T>* root)
	{
		queue<ForestNode<T>*> Queue;
		Queue.push(root);
		int height = 0;
		while (Queue.size() != 0)
		{
			cout << "level" << height + 1 << ":";
			int len = Queue.size();
			ForestNode<T>* node;
			for (int i = 1; i <= len; i++)
			{
				node = Queue.front();
				Queue.pop();
				while (node != NULL)
				{
					cout << node->data << " ";
					if (node->firstson != NULL) Queue.push(node->firstson);
					node = node->nextbrother;
				}
				cout << "   ";
			}
			cout << endl;
			height++;
		}
		return height;
	}
	int GetHeightByRecursion(ForestNode<T>* root)
	{
		if(root == NULL) return 0;
		return max(GetHeightByRecursion(root->firstson) + 1, GetHeightByRecursion(root->nextbrother));
	}
private:
	ForestNode<T>* FirstTreeRoot;
};
int main()
{
	cout << "Seqeuence storage structure:" << endl;
	SeqForest<char> sequenceBT(200);
	cout << "Please enter the expanded forest preorder list of Child brother list notation:";
	sequenceBT.build();
	cout << "Get height by recursion traversal:" << endl;
	cout << sequenceBT.GetHeightByRecursion() << endl;
	cout << "Forest's level traversal and get height:" << endl;
	cout << sequenceBT.LevelTraversalAndReturnHeight() << endl;
	cout << endl;
	cout << "List storage structure:" << endl;
	Forest<char> forest;
	ForestNode<char>* root = forest.getFirstTreeRoot();
	cin.get();
	cout << "Please enter the expanded forest preorder list of Child brother list notation:";
	forest.build(root);
	cout << "Get height by recursion traversal:";
	cout << forest.GetHeightByRecursion(root) << endl;
	cout << "Forest's level traversal and get height:" << endl;
	cout << forest.LevelTraversalAndReturnHeight(root) << endl;
}
MATLAB 设置legend加标题 x1 = linspace(0,5); y1 = sin(x1/2); plot(x1,y1) hold on x2 = [0 1 2 3 4 5]; y2 = [0.2 0.3 0.6 1 0.7 0.6]; scatter(x2,y2,'filled') hold off legend({'sin(x/2)','2016'},'Location','northwest','Orientation','horizontal')%水平 legend添加标题 lgd = legend; lgd.Fon 阅读详情

相关推荐

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 580

层序遍历求二叉树(链式存储结构)的高度

int Btdepth(Bitreee T){ if(!T) return 0; //如果是空树,则高度为1; int front =-1,rear=-1; //定义顺序队列,队列元素是二叉树结点指针,用于层序访问链式二叉树; BiTree Q[MaxSize]; ...

qq_37637619的博客 2643

配置 Druid 数据源及密码加密-SpringBoot 实战基础

在SpringBoot中配置 Druid 数据源及密码加密的方法前文集成 MyBatis Plus,实现了一组增删改查接口。在启动服务时,从控制台中可以看出 Spring Boot 默认使用 Hikari 作为数据库连接池,Hikari性能很优秀。在国内使用较多的连接池还属阿里开源的 Druid,中文发音为德鲁伊。Druid 结合了 C3P0、DBCP 等 DB 池的优点,同时还加入了日志监控,可以很好的监控 DB 池连接和 SQL 的执行情况。...

m0_67698950的博客 954

二叉树遍历及计算高度(层序遍历在下一章)

二叉树遍历及计算高度(层序遍历在下一章)

LloveN0128的博客 307

新出的智谱GLM-4.7很牛逼?

Zhipu AI(智谱)最近发布的 GLM-4.7 再次刷新了开源大模型的天花板。作为一款约 400B 参数规模的 MoE 模型,它不仅在传统的代码与推理任务上超越了 DeepSeek-V3.2 和 Kimi-K2 等强力对手,更通过**“保留思考(Preserved Thinking)”和“交错思考(Interleaved Thinking)”**等架构级创新,重新定义了 Agentic Workflow 的设计范式。

kakaZhui的博客 2393

28、解码清华SSVEP基准数据集:从EEG信号到深度学习模型的实战指南

本文详细解析了清华大学SSVEP基准数据集的处理与深度学习模型构建全流程。从EEG信号预处理、数据维度变换到SSVEP分类模型设计,提供了实战代码示例和关键技巧,帮助读者掌握脑机接口领域的数据处理方法与模型优化策略。

weixin_29029995的博客 176

数据结构和算法学习记录——层序遍历(层次遍历)、二叉树遍历的应用(输出二叉树中的叶节点、求二叉树的高度、二元运算表达式树及其遍历、由两种遍历序列确定二叉树)

数据结构和算法学习记录——层序遍历(层次遍历)、二叉树遍历的应用(输出二叉树中的叶节点、求二叉树的高度、二元运算表达式树及其遍历、由两种遍历序列确定二叉树)像这样一组简单的序列,只有先序遍历序列和后序遍历序列的情况下,就有两颗是符合的二叉树,其中根节点是容易确定的,先序的第一个节点就是根,后序的最后一个节点就是根;之前讲过的递归先序遍历二叉树写法很简单,而要输出二叉树中的叶节点,就可以在进行遍历的过程中进行检测,如果为叶节点则输出,否则继续遍历。

li13437542099的博客 4568

泛微E9表单建模查询列表勾选后带入流程明细表中

注意:参照下图各项配置,否则会有问题。

泛微二次开发后端知识总结 5308

数据结构实验8 森林后序遍历、叶子节点数量计算、森林高度计算

实验题目: 1、 实现森林先根(已提供)、后根遍历递归算法; 2、 计算森林的叶子节点个数(递归算法); 3、 计算森林的高度(递归算法); 思路: 关键思路就是:需要把非二叉树转为二叉树,从而计算相关高度、叶子节点数量。 加线、删除、旋转,完成二叉树的转化 ...

m0_46663240的博客 1021

国科大学习资料--高级软件工程-复习题概念解释答案

国科大学习资料–高级软件工程(罗铁坚 魏峻 刘丹)-复习题概念解释答案 1. 敏捷开发方法与Scrum方法 a.敏捷是一种强调轻量的过程方法论,它强调拥抱变化而不是与之对抗,通过有效的沟通发挥群体的智慧。敏捷方法采用迭代/增量开发的过程模型。敏捷宣言是:个体和交互高于流程和工具;工作的软件高于详尽的文档;客户合作高于合同谈判;响应变化高于遵循计划。 虽然右边的也有价值,但是认为左边的更有价值。 b.Scrum(Schwaber和Beedle)是管理两个披萨规模(4-9人)的软件开发团队的方法,它高频率的短会

无名何许人的博客 1442

tar解压报错 gzip: stdin: unexpected end of file tar: Unexpected EOF in archive

错误现象: [root@centos7-xinsz08 ~]# tar xf prometheus-2.7.2.linux-amd64.tar.gz gzip: stdin: unexpected end of file tar: 归档文件中异常的 EOF tar: 归档文件中异常的 EOF tar: Error is not recoverable: exiting now 错误原因排查 ...

互联网老辛 2万+

森林顺序结构(递归,层次)遍历求高度

森林顺序结构(递归,层次)遍历求高度 对于顺序结构我们利用类的封装要比结点更好更方便一点,因为再顺序结构中,我们需要用到数组,如果每一个结点一个数组就有点麻烦 1. forest类中私有成员函数 我们设置一个 数组array,和他的长度 private: int Max; char* array; 2.forest的构造函数 forest(int Max) { if (Max > 0) { this->Max = Max; array = new char[

yogur_father的博客 2359

手把手教你完成YOLOv11分类识别界面搭建,使用Qt6设计YOLOv11分类识别系统,前台系统+后台管理系统开发实战,全网最详细教程

本项目结合YOLOv11分类识别算法和PySide6框架,开发了一套图形化分类识别系统。系统支持图片、视频和摄像头实时分类检测,并具备完善的用户管理功能,包括登录验证、个人信息修改等模块。最新版本新增了管理员后台管理系统,包含用户管理、权限控制等功能。系统采用MySQL数据库存储用户数据,界面设计采用QtDesigner完成,实现了高效的目标分类与友好的交互体验。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1050

【算法与数据结构】二叉树 (二叉树遍历、递归与非递归实现先中后序遍历、层次遍历)

二叉树树的知识点1.1名词解释二叉树2.1二叉树的性质2.1.1性质2.1.2存储结构2.2 二叉树遍历2.2.1递归实现三种遍历升级二推一1.先序和中序推后序2.中序和后序推先序2.2.2非递归实现三种遍历二叉树遍历——栈实现层次遍历—— 队列实现小结: 树的知识点 1.1名词解释 1.节点的度: 一个节点含有的子树的个数称为该节点的度; 2.树的度: 一棵树中,最大的节点的度称为树的度; 3.叶节点或终端节点: 度为的节点; 4.非终端节点或分支节点: 度不为零的节点; 5.父亲节点或父节点: 若-一个

放纵小开爱的博客 743

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

《数据结构与算法》——树与二叉树之遍历总结

《数据结构与算法》——树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用。 目录 《数据结构与算法》——树与二叉树之遍历总结 树的基本概念 二叉树的基本概念 二叉树的存储结构 二叉树的遍历 方法声明 先序遍历·递归(PreOrder) 中序遍历.递归(InOrder) 后续...

Kwzc4的博客 1222

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【数据结构】树

二叉树(Binary Tree)是n(n≥0)个节点的有限集合,它或者是空集(n=0),或者是由一个根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成。二叉树与普通有序树不同,二叉树严格区分左孩子和右孩子,

猫猫的小茶馆 2195

golang 顺序遍历切片_数据结构树和二叉树(Golang)

这几天将树与二叉树知识梳理了一遍,这部分内容细小知识点非常非常多,时间有限诸如线索二叉树的内容等暂时就不总结了,但这些知识点是要好好学的。知识框架01树的基本概念【树的定义】树是N(N>=0)各节点的有限集合,当N=0时,我们称其为空树。在任意一棵非空树中应满足:有且仅有一个特定的称为根的结点。当N>1时,其余的结点又可分为互不相交的有限集合,其中每个集合又是...

weixin_30140399的博客 469

【二叉树】(非递归)四种遍历

树的概念与结构 二叉树 概念与结构 性质 存储结构 二叉树的遍历 二叉树的定义 前序遍历 中序遍历 后序遍历 层序遍历 二叉搜索树 AVL树 红黑树

知识分享与学习笔记总结,欢迎指点 2656

【数据结构】树和二叉树详细分析(全)

树的定义 树(Tree)是n(n>=0)个结点的有限集,它或为空树(n= 0); 或为非空树,对于非空树T: (1)有且仅有一个称之为根的结点; (2)除根结点以外的其余结点可分为 m(m>O)个互不相交的有限集 T1 T2 , …Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。 树的基本术语 ...

码农研究僧的博客 1万+

Javascript多叉树的递归遍历和非递归遍历

  luke_lin   博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 108  文章- 4  评论- 13  javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作 树型结构是一类非常重要的非线性结构。直观地,树型结构是以分支关系定义的层次结构。 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构;在数据库系统中,可用树...

许恒的博客 6613

数据结构 第六章 二叉树与树(树和森林)

因为:1 树的前序遍历和对应二叉树的前序遍历一样2 树的中序(后序)遍历和对应二叉树的中序遍历一样3 那么树的前序遍历代码可以写成对应二叉树的前序遍历代码4 树的中序(后序)遍历代码可以写成对应二叉树的中序遍历代码。

一路生花 1391

深入解析二叉树:结构、分类与遍历方法

二叉树(Binary Tree) 是每个节点最多有两个子节点的树结构。这两个子节点分别称为左子节点和右子节点。二叉树与普通树不同,二叉树的每个节点的子树分为左子树和右子树,即使只有一个子节点,也需要区分是左子节点还是右子节点。

TENET123的博客 2583

4 数据结构--树 (树的定义+遍历)

数据结构-树 KEY: 树的定义与术语 树的遍历 树的顺序存储结构和链式存储结构实现 一、树的定义与术语 1.1 定义 树型结构是一种动态的,非线性的,可描述结 构层次特性的数据结构。这种结构是按分枝关 系把信息联系起来的数据组织形式。 一棵树(tree)T是由一个或一个以上结点组成的有限集 其中有一个特定的结点R 称为T的根结点 集合(T-{R})中的其余结点可被划分为n≥0个互 不相交的子集T1,T2,…, Tn,其中每个子集本身 又是一棵树,并且其相应的根结点R1,R2,…,

monster的博客 2326

数据结构:树(Tree)【详解】

树 一、知识框架 二、考纲内容 树的基本概念 二叉树 二叉树的定义及其主要特征;二叉树的顺序存储结构和链式存储结构;二叉树的遍历;线索二叉树的基本概念和构造 树、森林 树的存储结构;森林与二叉树的转换;树和森林的遍历 树与二叉树的应用 二叉排序树;平衡二叉树;哈夫曼树和哈弗编码 三、树的基本概念 1、树的定义 树是n(n>=0)个结点的有限集。当n = 0时,称为空树。在任意一棵非空树中应满足: 有且仅有一个特定的称为根的结点。 当n>1时,其余节点可分为m(m>

UniqueUnit的博客 23万+

树结构的知识架构+二叉树的知识架构(含顺序与链式存储C语言完整代码实现)+树和森林与二叉树的转换

树的定义、孩子表示法、双亲表示法和孩子兄弟表示法。二叉树顺序结构和链式结构C语言完整代码实现,二叉树的前、中、后和层次四种遍历方式,树和森林与二叉树的转换。

crr411422的博客 1453

js 递归查询所有的叶子结点_js 中二叉树的深度遍历与广度遍历(递归实现与非递归实现)...

树的简介栈、队列、链表等数据结构,都是顺序数据结构。而树是非顺序数据结构。树型结构是一类非常重要的非线性结构。直观地,树型结构是以分支关系定义的层次结构。树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构;在数据库系统中,可用树来组织信息;在分析算法的行为时,可用树来描述其执行过程等等。树(Tree)是n(n>=0)个结点的有限集。在任意一棵非空树中:有...

weixin_39872334的博客 731

数据结构:树(基础概念操作图文解释)

本文比较全面的总结了树的概念及其性质,配有很多图片辅以理解,后又从递归和非递归两种方式实现了树的先序遍历、中序遍历和后续遍历,最后也实现了层序遍历并给出了部分遍历方式的过程解析。

weixin_46015333的博客 4703
上一篇: 【数据结构】 链表表示集合并实现并集、交集、差集运算功能
下一篇: 【数据结构】实验报告11 将二叉树后序线索化并进行后序遍历
RealWeakCoder
博客等级 码龄7年 236粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值