考研数据结构--树和二叉树(1)

news2024/11/15 10:51:01

树和二叉树

文章目录

  • 树和二叉树
    • 定义
      • 形式化定义
      • 递归定义
    • 树的(逻辑)表示
      • 树形表示法
      • 文氏图表示法
      • 凹入表示法
      • 括号表示法
    • 树的基本术语
      • 1. 结点的度与树的度
      • 2. 分支结点与叶结点
      • 3. 路径与路径长度
      • 4. 孩子结点、双亲结点和兄弟结点
      • 5. 子孙结点和祖先结点
      • 6. 结点的层次和树的高度
      • 7. 有序树和无序树
      • 8. 森林
    • 树的性质
      • 性质1:树中的结点数等于所有结点的度数之和加1。
        • 度为m的树的其他重要特性
      • 性质2:度为m的树中第i层至多有mi-1个结点(i>=1)。
      • 性质3:高度为h的m叉树至多有(mh-1)/(m-1)个结点。
      • 性质4:具有n个结点的m叉树的最小高度为⌈logm(n(m-1)+1)⌉。
    • 树的基本运算
      • 树的遍历
        • 树的先根遍历
        • 树的后根遍历
        • 树的层次遍历
    • 树的存储结构
      • 1. 双亲存储结构
      • 2. 孩子链式存储结构
      • 3. 孩子兄弟链存储结构
  • 二叉树
    • 递归定义
    • 二叉树的五种基本形态
    • 逻辑结构表示法
    • 二叉树和二次树的区别
  • 两种特殊的二叉树(满二叉树和完全二叉树)
    • 满二叉树
    • 完全二叉树
      • 完全二叉树的特点
  • 二叉树的性质
    • 性质1
    • 性质2
    • 性质3
    • 性质4:(完全二叉树的性质)
  • 森林、树转换为二叉树
  • 二叉树还原为森林、树
  • 二叉树的存储结构
    • 二叉树的顺序存储结构
      • 完全二叉树的顺序存储结构
      • 一般二叉树的顺序存储结构
      • 二叉树的顺序存储结构的特点
    • 二叉树的链式存储结构
      • 二叉链存储结构示例
      • 二叉链存储结构的特点
      • 求二叉链的空指针个数
  • 二叉树的基本运算
    • 创建二叉树
    • 销毁二叉树
    • 查找结点
    • 找孩子结点
    • 求高度
    • 输出二叉树

定义

形式化定义

在这里插入图片描述

递归定义

在这里插入图片描述

树的(逻辑)表示

树形表示法

在这里插入图片描述

文氏图表示法

在这里插入图片描述

凹入表示法

在这里插入图片描述

括号表示法

在这里插入图片描述

树的基本术语

  • 树结点 (Tree Node) :树中元素的基本单位。包含一个数据元素及若干指向其子树的分支。
  • 结点的度 (Degree) :结点拥有的子树个数。
  • 树的度 (Tree Degree) :树中各结点的度的最大值。
  • 双亲 (Parent)和孩子 (Child) :把一个树结点的直接前驱 (只有一个)称为该结点的双亲;相反的,把一个树结点的所有直接后继 (零到多个)称为该结点的孩子。
  • 兄弟 (Sibling) :同一双亲的孩子之间称为兄弟。
  • 祖先 (Ancenstor):从根到该结点所经分支上的所有结点。
  • 子孙 (Descendant) :以某结点为根的子树中的任一结点。
  • 树的层次 (Level) :从根结点算起,根为第一层,根的孩子为第二层,以此类推。
  • 树的深度 (Depth)或高度:树中各结点层次的最大值。
  • 有序树 (Ordered Tree)和无序树 ((Unordered Tree)) :如果树中结点的各子树可看成从左至右是有次序的 (即不能互换),则称该树为有序树,否则称为无序树。

1. 结点的度与树的度

在这里插入图片描述

2. 分支结点与叶结点

在这里插入图片描述

3. 路径与路径长度

在这里插入图片描述

4. 孩子结点、双亲结点和兄弟结点

在这里插入图片描述

5. 子孙结点和祖先结点

在这里插入图片描述

6. 结点的层次和树的高度

在这里插入图片描述

7. 有序树和无序树

在这里插入图片描述

8. 森林

在这里插入图片描述

在这里插入图片描述

树的性质

性质1:树中的结点数等于所有结点的度数之和加1。

在这里插入图片描述

在这里插入图片描述

度为m的树的其他重要特性

在这里插入图片描述

在这里插入图片描述

小练一下

在这里插入图片描述

性质2:度为m的树中第i层至多有mi-1个结点(i>=1)。

在这里插入图片描述

性质3:高度为h的m叉树至多有(mh-1)/(m-1)个结点。

在这里插入图片描述

等比数列前N项和计算公式:Sn =a1 (1-q^n)/ (1-q)

性质4:具有n个结点的m叉树的最小高度为⌈logm(n(m-1)+1)⌉。

在这里插入图片描述

在这里插入图片描述

树的基本运算

树的运算主要分为三大类:

  • 查找满足某种特定关系的结点,如查找当前结点的双亲结点等。
  • 插入或删除某个结点,如在树的当前结点上插入一个新结点或删除当前结点的第i个孩子结点等。
  • 遍历树中每个结点。

树的遍历

在这里插入图片描述

树的先根遍历

在这里插入图片描述

树的后根遍历

在这里插入图片描述

树的层次遍历

在这里插入图片描述

树的存储结构

1. 双亲存储结构

在这里插入图片描述

在这里插入图片描述

typedef struct {
    int data;
    int parent;
}PTree[MaxSize];

优缺点

双亲存储结构的优点是可以方便地找到任意结点的双亲结点,但是缺点是不容易找到任意结点的孩子结点,也不方便计算树的深度和度数。

2. 孩子链式存储结构

在这里插入图片描述

在这里插入图片描述

优缺点

孩子链式存储结构的优点是可以方便地找到任意结点的所有孩子结点,但是缺点是不容易找到任意结点的双亲结点,也不方便计算树的深度和度数。

定义MaxSize为3,然后定义TSonNode类型,如下:

#define MaxSize 3
typedef struct node{
    int data;
    struct node *sons[MaxSize];
} TSonNode;

然后,创建10个TSonNode类型的结点,并给它们赋值,如下:

//创建10个结点
TSonNode *nodes[10];
for(int i = 0; i < 10; i++){
    //为每个结点分配内存空间
    nodes[i] = (TSonNode *)malloc(sizeof(TSonNode));
    //为每个结点的data赋值
    nodes[i]->data = i;
    //为每个结点的sons数组赋初值NULL
    for(int j = 0; j < MaxSize; j++){
        nodes[i]->sons[j] = NULL;
    }
}

接下来,建立结点之间的关系,即设置sons数组的指针,如下:

//建立结点之间的关系
nodes[0]->sons[0] = nodes[1]; //节点0的第一个孩子是节点1
nodes[0]->sons[1] = nodes[2]; //节点0的第二个孩子是节点2
nodes[1]->sons[0] = nodes[3]; //节点1的第一个孩子是节点3
nodes[1]->sons[1] = nodes[4]; //节点1的第二个孩子是节点4
nodes[2]->sons[0] = nodes[5]; //节点2的第一个孩子是节点5
nodes[2]->sons[1] = nodes[6]; //节点2的第二个孩子是节点6
nodes[3]->sons[0] = nodes[7]; //节点3的第一个孩子是节点7
nodes[4]->sons[0] = nodes[8]; //节点4的第一个孩子是节点8
nodes[6]->sons[0] = nodes[9]; //节点6的第一个孩子是节点9

最后,遍历这棵树,打印出每个结点的数据和孩子结点的数据,如下:

//遍历这棵树,打印出每个结点的数据和孩子结点的数据
for(int i = 0; i < 10; i++){
    printf("node %d: data = %d, sons = ", i, nodes[i]->data);
    for(int j = 0; j < MaxSize; j++){
        if(nodes[i]->sons[j] != NULL){
            printf("%d ", nodes[i]->sons[j]->data);
        }
        else{
            printf("NULL ");
        }
    }
    printf("\n");
}

运行这段代码,可以得到以下输出:

node 0: data = 0, sons = 1 2 NULL 
node 1: data = 1, sons = 3 4 NULL 
node 2: data = 2, sons = 5 6 NULL 
node 3: data = 3, sons = 7 NULL NULL 
node 4: data = 4, sons = 8 NULL NULL 
node 5: data = 5, sons = NULL NULL NULL 
node 6: data = 6, sons = 9 NULL NULL 
node 7: data = 7, sons = NULL NULL NULL 
node 8: data = 8, sons = NULL NULL NULL 
node 9: data = 9, sons = NULL NULL NULL 

3. 孩子兄弟链存储结构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

优缺点

孩子兄弟链存储结构的优点是可以将任意一棵树转化为一棵二叉树,从而利用二叉树的算法和性质,也可以方便地找到任意结点的孩子结点和兄弟结点,但是缺点是不容易找到任意结点的双亲结点,也不方便计算树的深度和度数。

首先,定义TSBNode类型,如下:

typedef struct tnode{
    int data;
    struct tnode *hp;
    struct tnode *vp;
} TSBNode;

然后,创建9个TSBNode类型的结点,并给它们赋值,如下:

//创建9个结点
TSBNode *nodes[9];
for(int i = 0; i < 9; i++){
    //为每个结点分配内存空间
    nodes[i] = (TSBNode *)malloc(sizeof(TSBNode));
    //为每个结点的data赋值
    nodes[i]->data = i;
    //为每个结点的hp和vp赋初值NULL
    nodes[i]->hp = NULL;
    nodes[i]->vp = NULL;
}

接下来,建立结点之间的关系,即设置hp和vp指针,如下:

//建立结点之间的关系
nodes[0]->vp = nodes[1]; //节点0的第一个孩子是节点1
nodes[1]->hp = nodes[2]; //节点1的水平方向的下一个兄弟是节点2
nodes[1]->vp = nodes[3]; //节点1的第一个孩子是节点3
nodes[2]->hp = nodes[4]; //节点2的水平方向的下一个兄弟是节点4
nodes[2]->vp = nodes[5]; //节点2的第一个孩子是节点5
nodes[3]->hp = nodes[6]; //节点3的水平方向的下一个兄弟是节点6
nodes[4]->vp = nodes[7]; //节点4的第一个孩子是节点7
nodes[6]->hp = nodes[8]; //节点6的水平方向的下一个兄弟是节点8

最后,遍历这棵树形表,打印出每个结点的数据和水平方向和垂直方向的下一个结点的数据,如下:

//遍历这棵树形表,打印出每个结点的数据和水平方向和垂直方向的下一个结点的数据
for(int i = 0; i < 9; i++){
    printf("node %d: data = %d, hp = ", i, nodes[i]->data);
    if(nodes[i]->hp != NULL){
        printf("%d ", nodes[i]->hp->data);
    }
    else{
        printf("NULL ");
    }
    printf(", vp = ");
    if(nodes[i]->vp != NULL){
        printf("%d ", nodes[i]->vp->data);
    }
    else{
        printf("NULL ");
    }
    printf("\n");
}

运行这段代码,可以得到以下输出:

node 0: data = 0, hp = NULL , vp = 1 
node 1: data = 1, hp = 2 , vp = 3 
node 2: data = 2, hp = 4 , vp = 5 
node 3: data = 3, hp = 6 , vp = NULL 
node 4: data = 4, hp = NULL , vp = 7 
node 5: data = 5, hp = NULL , vp = NULL 
node 6: data = 6, hp = 8 , vp = NULL 
node 7: data = 7, hp = NULL , vp = NULL 
node 8: data = 8, hp = NULL , vp = NULL 

二叉树

递归定义

在这里插入图片描述

例子

在这里插入图片描述

二叉树的五种基本形态

在这里插入图片描述

逻辑结构表示法

在这里插入图片描述

二叉树和二次树的区别

在这里插入图片描述

两种特殊的二叉树(满二叉树和完全二叉树)

满二叉树

在这里插入图片描述
在这里插入图片描述

完全二叉树

在这里插入图片描述

完全二叉树的特点

在这里插入图片描述

例题

在这里插入图片描述

二叉树的性质

性质1

在这里插入图片描述

求解一般二叉树结点个数方法归纳

在这里插入图片描述

性质2

性质3

在这里插入图片描述

性质4:(完全二叉树的性质)

在这里插入图片描述

在这里插入图片描述

求解完全二叉树结点个数方法归纳

在这里插入图片描述

森林、树转换为二叉树

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二叉树还原为森林、树

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二叉树的存储结构

二叉树的顺序存储结构

在这里插入图片描述

完全二叉树的顺序存储结构

在这里插入图片描述

一般二叉树的顺序存储结构

在这里插入图片描述

二叉树的顺序存储结构的特点

在这里插入图片描述

在这里插入图片描述

二叉树的链式存储结构

在这里插入图片描述

typedef struct btNode{
    char data;
    struct btNode *lChild, *rChild;
} BTNode, *BTree;

二叉链存储结构示例

在这里插入图片描述

二叉链存储结构的特点

在这里插入图片描述

求二叉链的空指针个数

在这里插入图片描述

二叉树的基本运算

在这里插入图片描述

在这里插入图片描述

创建二叉树

// 创建一个二叉树节点
BTree createNode(char data) {
    BTree node = (BTree)malloc(sizeof(BTNode));
    node->data = data;
    node->lChild = NULL;
    node->rChild = NULL;
    return node;
}

// 创建一个二叉树
BTree createTree() {
    char data;
    scanf("%s", &data); // 输入节点数据
    if (data == '#') { // 如果是'#',表示空节点,返回NULL
        return NULL;
    }
    BTree root = createNode(data); // 创建根节点
    root->lChild = createTree(); // 递归创建左子树
    root->rChild = createTree(); // 递归创建右子树
    return root; // 返回根节点
}

在这里插入图片描述

销毁二叉树

在这里插入图片描述

在这里插入图片描述

查找结点

查找一个二叉树中的某个节点的一种方法是使用递归的方式,从根节点开始,比较节点的数据和要查找的数据,如果相等,就返回该节点,如果不相等,就分别在左子树和右子树中递归查找,如果找到了,就返回找到的节点,如果没有找到,就返回NULL。

// 查找一个二叉树中的某个节点
BTree searchNode(BTree root, char data) {
    if (root == NULL) { // 如果根节点为空,返回NULL
        return NULL;
    }
    if (root->data == data) { // 如果根节点的数据和要查找的数据相等,返回根节点
        return root;
    }
    BTree left = searchNode(root->lChild, data); // 递归在左子树中查找
    if (left != NULL) { // 如果在左子树中找到了,返回找到的节点
        return left;
    }
    BTree right = searchNode(root->rChild, data); // 递归在右子树中查找
    if (right != NULL) { // 如果在右子树中找到了,返回找到的节点
        return right;
    }
    return NULL; // 如果都没有找到,返回NULL
}

在这里插入图片描述

在这里插入图片描述

找孩子结点

查找一个二叉树中的某个节点的孩子节点的一种方法是使用递归的方式,从根节点开始,比较节点的数据和要查找的数据,如果相等,就返回该节点的左孩子和右孩子,如果不相等,就分别在左子树和右子树中递归查找,如果找到了,就返回找到的节点的孩子节点,如果没有找到,就返回NULL。

// 查找一个二叉树中的某个节点的孩子节点
void searchChildren(BTree root, char data, BTree &leftChild, BTree &rightChild) {
    if (root == NULL) { // 如果根节点为空,返回NULL
        leftChild = NULL;
        rightChild = NULL;
        return;
    }
    if (root->data == data) { // 如果根节点的数据和要查找的数据相等,返回根节点的左孩子和右孩子
        leftChild = root->lChild;
        rightChild = root->rChild;
        return;
    }
    searchChildren(root->lChild, data, leftChild, rightChild); // 递归在左子树中查找
    if (leftChild != NULL || rightChild != NULL) { // 如果在左子树中找到了,返回
        return;
    }
    searchChildren(root->rChild, data, leftChild, rightChild); // 递归在右子树中查找
}

求高度

在这里插入图片描述

// 定义一个max方法
int max(int a, int b) {
    if (a > b) { // 如果a大于b,返回a
        return a;
    }
    else { // 否则,返回b
        return b;
    }
}
// 求一个二叉树的高度
int getHeight(BTree root) {
    if (root == NULL) { // 如果根节点为空,返回0
        return 0;
    }
    int leftHeight = getHeight(root->lChild); // 递归求左子树的高度
    int rightHeight = getHeight(root->rChild); // 递归求右子树的高度
    return max(leftHeight, rightHeight) + 1; // 返回较大的高度加1
}

输出二叉树

在这里插入图片描述

// 用二叉树的括号表示来输出二叉树
void printTreeWithBrackets(BTree root) {
    if (root == NULL) { // 如果根节点为空,不打印任何东西
        return;
    }
    printf("%c", root->data); // 打印根节点的数据
    printf("("); // 打印一个左括号
    printTreeWithBrackets(root->lChild); // 递归输出左子树
    printf(")"); // 打印一个右括号
    printf(",");
    printf("("); // 打印一个左括号
    printTreeWithBrackets(root->rChild); // 递归输出右子树
    printf(")"); // 打印一个右括号
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/508966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建web服务器

目录标题 搭建web服务器&#xff0c;并显示Redhat测试界面linux主机作为服务器部署web服务程序 Apache http server&#xff08;httpd&#xff09;当前主机启动该服务程序关闭防火墙和selinux 客户端 搭建网站创建自拟定网页文件linux主机作为服务器部署web服务器程序当前主机启…

Qt配置glfw库(Windows)

文章目录 一、下载glfw二、配置2.1、创建Qt工程2.2、移植库文件2.3、导入库到Qt工程2.4、添加OpenGL库2.5、测试代码 一、下载glfw glfw官网下载&#xff1a;https://www.glfw.org/download.html 下载之后&#xff0c;解压如下&#xff1a; 二、配置 2.1、创建Qt工程 创建一…

优质且免费的10个在线图片设计网站!

1.即时设计 即时设计资源社区是一个开源式免费商用图片素材网站&#xff0c;将社交、作品浏览和模板复用融合在一起。它内置了来自国内外优秀设计系统如TDesign、Arco Design、Ant Design和Material Design等的海量设计规范&#xff0c;以及超过3000个UI组件库和每月更新的上百…

远程桌面连接是什么?如何开启远程桌面连接详细教程

远程桌面连接是一种非常方便的技术&#xff0c;它允许用户通过互联网在不同的计算机之间共享资源和访问数据。目前这个技术已经广泛地应用于企业、教育、医疗和其他领域&#xff0c;使得人们能够更高效地工作和学习。 这篇文章&#xff0c;我将解释远程桌面连接是什么&#xf…

leecode111——二叉树最短路径

递归三部曲&#xff1a; 最小深度是从根节点到最近叶子节点的最短路径上的节点数量 &#xff08;1&#xff09;确定参数和返回值&#xff0c; 参数为传入根节点&#xff0c;再根据此遍历左右左右树的节点。返回最短路径&#xff0c;即int类型。 &#xff08;2&#xff09;确…

第4章 静态网站部署

第4章 静态网站部署 Nginx是一个HTTP的web服务器&#xff0c;可以将服务器上的静态文件&#xff08;如HTML、图片等&#xff09;通过HTTP协议返回给浏览器客户端 4.1 案例&#xff1a;将ace-master这个静态网站部署到Nginx服务器上 4.1.1 通过Xftp将ace-master到linux服务器…

深入探究HDFS:高可靠、高可扩展、高吞吐量的分布式文件系统【上进小菜猪大数据系列】

上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货。 引言 在当今数据时代&#xff0c;数据的存储和处理已经成为了各行各业的一个关键问题。尤其是在大数据领域&#xff0c;海量数据的存储和处理已经成为了一个不可避免的问题。为了应…

Sharding-JDBC之广播表(公共表)

目录 一、简介二、maven依赖三、数据库3.1、创建数据库3.2、创建表 四、配置&#xff08;二选一&#xff09;4.1、properties配置4.2、yml配置 五、实现5.1、持久层5.2、持久层5.3、服务层5.4、测试类5.4.1、保存数据5.4.2、查询广播表5.4.3、查询订单数据&#xff08;关联广播…

selenium——unittest框架

目录 一、unittest框架基本介绍二、unittest框架解析三、unittest框架使用方法1.测试固件2.测试套件3.用例的执行顺序4.忽略测试用例中的方法5.unittest断言6.HTML报告生成 一、unittest框架基本介绍 在进行selenium IDE脚本录制导出的脚本中&#xff0c;我们发现其中多了很多…

第十三章_Redis中的BigKey

MoreKey案例 大批量往redis里面插入2000W测试数据key Linux Bash下面执行&#xff0c;插入100W # 生成100W条redis批量设置kv的语句(keykn,valuevn)写入到/tmp目录下的redisTest.txt文件中 for((i1;i<100*10000;i)); do echo "set k$i v$i" >> /tmp/redi…

使用Eclipse +SpotBugs 检测代码弱点

文章目录 SpotBugs 插件的安装SpotBugs 的使用弱点扫描弱点查看的视图SpotBugs 是分析Java代码弱点的静态分析工具,SpotBugs提供了Eclipse的插件使用方式,在Eclipse 中安装插件之后就可以坚持Java代码的弱点了。 SpotBugs 插件的安装 SpotBugs 的插件安装主要有两种方式 在插…

8款 Vue 富文本编辑器

文章目录 TinyMCE - 富文本编辑器里的 Word &#xff0c;功能想不到的丰富tiptap - 多人在线实时协同编辑CKEditor 5 - 开源免费可商用&#xff0c;行内编辑Quill - 易扩展、轻量级二开、代码高亮好用Froala - 插件丰富&#xff0c;UI友好&#xff0c;编辑器里的苹果summernote…

Android系统原理性问题分析 - 消息传递机制的分析(Looper 和 Handler)

声明 在Android系统中经常会遇到一些系统原理性的问题&#xff0c;在此专栏中集中来讨论下。比如&#xff1a;Android为了线程安全&#xff0c;不允许在UI线程外操作UI&#xff0c;很多时候做界面刷新都需要通过Handler来通知UI组件更新。此篇参考一些博客和书籍&#xff0c;不…

数据库sql语句练习(三)

例题&#xff1a; ●哪些项目消费了不止一次 select distinct name消费了不止一次的项目 from shopping group by name having count(*)>1 注&#xff1a;加disdinct去除重复的返回值&#xff0c;不加默认为all ●按照不同消费项目的总金额从高到低的顺序&#xff0c;列出不…

PMP证书“扫盲”时间2023年考证人快看过来

二&#xff0c;PMP报考指南 学历与工作经验要求&#xff1a; 本科及以上学历&#xff0c;三年或以上的项目管理工作经验&#xff1b; 专科及以上学历&#xff0c;五年或以上的项目管理工作经验。 项目管理培训&#xff1a;35小时以上的项目管理教育/培训。 备注&#xff1…

Vue3-黑马(一)

目录&#xff1a; &#xff08;1&#xff09;vue3-基础-环境准备 &#xff08;2&#xff09;vue3-基础-入门案例 &#xff08;3&#xff09;vue3-基础-main.ts &#xff08;1&#xff09;vue3-基础-环境准备 vue3的技术选型&#xff0c;它提供了两套API&#xff0c;一个是选…

面试题——selenium原理解析、appium原理解析

这里写目录标题 一、selenium原理解析1、目的2、技术点3、Selenium 介绍4、Selenium 自动化测试5、为什么能够支持这么多种浏览器&#xff1f;6、Selenium 工作原理 二、appium原理解析1、目的2、技术点3、Appium 介绍4、Appium 工作原理 一、selenium原理解析 1、目的 了解是…

远程桌面连接出现了内部错误怎么解决?

远程桌面连接是一种非常方便的工具&#xff0c;可以让用户从远程访问其他计算机的桌面界面。但是&#xff0c;有时候在连接远程桌面时会出现内部错误&#xff0c;导致无法连接或者连接后无法正常使用。在本文中&#xff0c;我们将会讨论远程桌面连接出现内部错误的原因和解决方…

CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议

只有添加分发加速的域名才能使用HLS加密&#xff0c;同时也要做HTTPS证书添加&#xff0c;不然也会报错。 1、这是电脑端视频播放页面效果 2、这个手机端H5视频播放页面效果 3、在网站后台上传你的视频内容 4、上传完之后可以进行预览 5、在阿里云控制台设置就好自己的转码模…

舞台特效-第14届蓝桥杯省赛Scratch初级组真题第2题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第131讲。 舞台特效&#xff0c;本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程初级组真题第2题&#xf…