当前位置: 首页 > news >正文

数据结构 - 5(二叉树7000字详解)

一:二叉树的基本概念

1.1树形结构

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

在这里插入图片描述
在这里插入图片描述
注意:树形结构中,子树之间不能有交集,否则就不是树形结构

1.2 数的相关概念

在这里插入图片描述

  • 结点的度:一个结点含有子树的个数称为该结点的度; 如上图:A的度为6
  • 树的度:一棵树中,所有结点度的最大值称为树的度; 如上图:树的度为6
  • 叶子结点或终端结点:度为0的结点称为叶结点; 如上图:B、C、H、I…等节点为叶结点
  • 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点; 如上图:A是B的父结点
  • 孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点; 如上图:B是A的孩子结点
  • 根结点:一棵树中,没有双亲结点的结点;如上图:A
  • 结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推
  • 树的高度或深度:树中结点的最大层次; 如上图:树的高度为4

树的以下概念只需了解,在看书时只要知道是什么意思即可:

  • 非终端结点或分支结点:度不为0的结点; 如上图:D、E、F、G…等节点为分支结点
  • 兄弟结点:具有相同父结点的结点互称为兄弟结点; 如上图:B、C是兄弟结点
  • 堂兄弟结点:双亲在同一层的结点互为堂兄弟;如上图:H、I互为兄弟结点
  • 结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先
  • 子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙
  • 森林:由m(m>=0)棵互不相交的树组成的集合称为森林

1.3 树的表现形式

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,实际中树有很多种表示方式,如:双亲表示法,孩子表示法、孩子双亲表示法、孩子兄弟表示法等等。我们这里就简单的了解其中最常用的孩子兄弟表示法。

class Node {int value; // 树中存储的数据Node firstChild; // 第一个孩子引用Node nextBrother; // 下一个兄弟引用
}

在这里插入图片描述

1.4树的应用

文件系统管理(目录和文件)
在这里插入图片描述
在这里插入图片描述

1.5 二叉树

二叉树是一种常见的树状数据结构,它由节点和边组成。每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树具有以下特点:

  1. 二叉树不存在度大于2的结点
  2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

如下图所示:

在这里插入图片描述

注意:对于任意的二叉树都是由以下几种情况复合而成的:
在这里插入图片描述

大自然的奇观:
在这里插入图片描述
在这里插入图片描述

1.6 两种特殊的二叉树

  1. 满二叉树:满二叉树是指每个节点都有两个子节点(除了叶子节点)。换句话说,满二叉树是一种节点数目达到最大可能值的二叉树。例如,如果一棵二叉树的深度为d,那么它的节点数目就是2^d - 1。

  2. 完全二叉树:完全二叉树是指除了最后一层外,其他层的节点都被完全填充,并且最后一层的节点都尽量靠左排列的二叉树。换句话说,完全二叉树是在满二叉树的基础上,去掉一些叶子节点而得到的二叉树。

如图所示:
在这里插入图片描述

1.7 二叉树的重要性质

  1. 性质一:叶子结点的个数是度为2结点的个数+1

要理解为什么对任何一棵二叉树,其叶结点个数为 n0,度为2的非叶结点个数为 n2,有 n0 = n2 + 1,我们首先需要了解二叉树的定义和性质。

二叉树是一种特殊的树结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。叶节点是没有子节点的节点,而度为2的非叶节点是具有两个子节点的非叶节点。

让我们来证明这个等式 n0 = n2 + 1 :

  1. 首先,我们将二叉树的节点按照度的数量进行分类。由于二叉树的节点度数只有0、1、2三种情况,我们可以得出以下等式:n = n0 + n1 + n2,其中 n 表示二叉树的总节点数。

  2. 其次,我们来考虑度为0的节点,也就是叶节点。叶节点是没有子节点的节点,所以它的度为0。假设叶节点的个数为 n0。

  3. 然后,我们考虑度为2的非叶节点,也就是具有两个子节点的非叶节点。假设度为2的非叶节点的个数为 n2。

  4. 根据二叉树的性质,每个非叶节点都会有两个子节点。所以,度为2的非叶节点的总子节点个数为 2 * n2。

  5. 接下来,我们来看看二叉树的总子节点个数。根据节点分类的等式,可以得出总子节点个数为 n1 + 2 * n2。其中 n1 表示度为1的节点的个数。

  6. 由于每个节点都有两个子节点,所以总子节点个数应该等于 n - 1(根节点除外)。因此,我们可以得到以下等式:n1 + 2 * n2 = n - 1。

  7. 最后,我们将以上的等式整合起来,得到 n0 + n1 + n2 = n。将 n1 + 2 * n2 = n - 1 代入其中,得到 n0 + (n - 1) = n,即 n0 = n2 + 1。

根据上述推导,我们可以得出结论:对于任何一棵二叉树,其叶结点个数为 n0,度为2的非叶结点个数为 n2,有 n0 = n2 + 1。即叶子结点的个数是度为2结点的个数+1,这是二叉树性质的一个重要结论。

  1. 性质二:具有n个结点的完全二叉树的深度k为 上取整

  2. 性质三:对于具有n个结点的完全二叉树,如果按照从上至下从左至右的顺序对所有节点从0开始编号,则对于序号为i的结点有:

  • 若2i+1<n,左孩子序号:2i+1,否则无左孩子
  • 若2i+2<n,右孩子序号:2i+2,否则无右孩子

在这里插入图片描述

  1. 性质四:我们可以根据array.length-2)>>1计算倒数第一个非叶子节点的索引

二:二叉树的遍历,存储和实现

2.1 二叉树的遍历

二叉树的遍历方式有四种,分别是前序遍历,中序遍历,后序遍历和层序遍历,这是我们约定俗成的规定。

前序遍历(Preorder Traversal)是一种遍历二叉树的方法。在前序遍历中,我们首先访问根节点,然后遍历左子树,最后遍历右子树。具体过程如下:

  1. 访问当前节点(根节点)。
  2. 递归地前序遍历左子树。
  3. 递归地前序遍历右子树。

下面是一个例子来说明前序遍历:

      1/ \2   3/ \4   5

前序遍历结果:1 2 4 5 3

中序遍历(Inorder Traversal)是另一种遍历二叉树的方法。在中序遍历中,我们首先遍历左子树,然后访问根节点,最后遍历右子树。具体过程如下:

  1. 递归地中序遍历左子树。
  2. 访问当前节点(根节点)。
  3. 递归地中序遍历右子树。

下面是一个例子来说明中序遍历:

      1/ \2   3/ \4   5

中序遍历结果:4 2 5 1 3

后序遍历(Postorder Traversal)是另一种遍历二叉树的方法。在后序遍历中,我们首先遍历左子树,然后遍历右子树,最后访问根节点。具体过程如下:

  1. 递归地后序遍历左子树。
  2. 递归地后序遍历右子树。
  3. 访问当前节点(根节点)。

下面是一个例子来说明后序遍历:

      1/ \2   3/ \4   5

后序遍历结果:4 5 2 3 1

层序遍历:除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。

在这里插入图片描述
这个图的层序遍历结果就是ABCDEFGHI

下面是一个练习,请同学们根据下图,给出以下二叉树的四种遍历方式:

在这里插入图片描述

前序遍历:ABDEHCFG
中序遍历:DBEHAFCG
后序遍历:DHEBFGCA
层序遍历:ABCDEFGH

2.2二叉树的存储

二叉树的存储结构分为:顺序存储和类似于链表的链式存储。顺序存储在下节介绍。
二叉树的链式存储是通过一个一个的节点引用起来的,常见的表示方式有二叉和三叉表示方式,具体如下:

// 孩子表示法
class Node {int val; // 数据域Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树Node right; // 右孩子的引用,常常代表右孩子为根的整棵右子树
}// 孩子双亲表示法
class Node {int val; // 数据域Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树Node right; // 右孩子的引用,常常代表右孩子为根的整棵右子树Node parent;   // 当前节点的根节点
}

本文采用孩子表示法来构建二叉树。

2.3二叉树的实现

在Java中,并没有内置的二叉树类。但是,我们可以通过自定义类来实现二叉树的功能。下面是模拟实现二叉树并给出主方法进行测试的代码:


import java.util.LinkedList;
import java.util.Queue;// 定义二叉树节点类
class Node {int data;Node left;Node right;// 节点构造函数public Node(int data) {this.data = data;left = null;right = null;}
}// 定义二叉树类
class BinaryTree {Node root;// 构造函数,初始化根节点public BinaryTree() {root = null;}// 获取树中节点的个数public int size(Node root) {if (root == null) {return 0;} else {// 递归地计算左子树和右子树节点个数,并加上根节点return 1 + size(root.left) + size(root.right);}}// 获取叶子节点的个数public int getLeafNodeCount(Node root) {if (root == null) {return 0;} else if (root.left == null && root.right == null) {// 叶子节点的定义:左右子节点都为空return 1;} else {// 递归地计算左子树和右子树叶子节点个数,并相加return getLeafNodeCount(root.left) + getLeafNodeCount(root.right);}}// 获取第K层节点的个数public int getKLevelNodeCount(Node root, int k) {if (root == null || k <= 0) {return 0;} else if (k == 1) {// 第1层就是根节点本身return 1;} else {// 递归地计算左子树和右子树第k-1层节点个数,并相加return getKLevelNodeCount(root.left, k - 1) + getKLevelNodeCount(root.right, k - 1);}}// 获取二叉树的高度public int getHeight(Node root) {if (root == null) {return 0;} else {// 递归地计算左子树和右子树的高度,并取最大值,再加上根节点int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);return Math.max(leftHeight, rightHeight) + 1;}}// 检测值为value的元素是否存在public Node find(Node root, int val) {if (root == null) {return null;} else if (root.data == val) {// 找到了与目标值相等的节点return root;} else {// 递归地在左子树和右子树中查找值为val的节点Node foundNode = find(root.left, val);if (foundNode == null) {foundNode = find(root.right, val);}return foundNode;}}// 层序遍历public void levelOrder(Node root) {if (root == null) {return;}// 使用队列辅助层序遍历Queue<Node> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) {Node current = queue.poll();System.out.print(current.data + " ");if (current.left != null) {queue.add(current.left);}if (current.right != null) {queue.add(current.right);}}}// 判断一棵树是不是完全二叉树public boolean isCompleteTree(Node root) {if (root == null) {return true;}Queue<Node> queue = new LinkedList<>();boolean isNonFullNodeFound = false; // 是否找到了不是满节点的节点queue.add(root);while (!queue.isEmpty()) {Node current = queue.poll();if (current.left != null) {if (isNonFullNodeFound) {return false; // 如果之前找到了不是满节点的节点,当前节点有左子节点,则不是完全二叉树}queue.add(current.left);} else {isNonFullNodeFound = true; // 记录找到了不是满节点的节点}if (current.right != null) {if (isNonFullNodeFound) {return false; // 如果之前找到了不是满节点的节点,当前节点有右子节点,则不是完全二叉树}queue.add(current.right);} else {isNonFullNodeFound = true; // 记录找到了不是满节点的节点}}return true;}
}

下面再给出主方法用于测试这些方法的功能:

import java.util.Arrays;public class Main {public static void main(String[] args) {// 创建一个示例二叉树Node root = new Node(1);root.left = new Node(2);root.right = new Node(3);root.left.left = new Node(4);root.left.right = new Node(5);root.right.left = new Node(6);root.right.right = new Node(7);BinaryTree binaryTree = new BinaryTree();// 测试 size 方法System.out.println("树中节点的个数:" + binaryTree.size(root)); // 7// 测试 getLeafNodeCount 方法System.out.println("叶子节点的个数:" + binaryTree.getLeafNodeCount(root)); // 4// 测试 getKLevelNodeCount 方法int k = 3;System.out.println("第" + k + "层节点的个数:" + binaryTree.getKLevelNodeCount(root, k)); // 2// 测试 getHeight 方法System.out.println("二叉树的高度:" + binaryTree.getHeight(root)); // 3// 测试 find 方法int target = 5;Node foundNode = binaryTree.find(root, target);if (foundNode != null) {System.out.println("找到值为" + target + "的节点");} else {System.out.println("未找到值为" + target + "的节点");}// 测试 levelOrder 方法System.out.print("层序遍历结果:");binaryTree.levelOrder(root); // 1 2 3 4 5 6 7System.out.println();// 测试 isCompleteTree 方法System.out.print("是否是完全二叉树:");if (binaryTree.isCompleteTree(root)) {System.out.println("是");} else {System.out.println("否");}}
}

相关文章:

数据结构 - 5(二叉树7000字详解)

一&#xff1a;二叉树的基本概念 1.1树形结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 注意&am…...

xshell使用方法(超详细)

一、安装 下载最新版安装即可&#xff0c;不需要做任何配置。 安装完成后输入账号名和邮箱&#xff0c;确认后邮箱会收到一条确认邮件&#xff0c;将里面的链接点开即可免费使用&#xff08;仅安装后会出现&#xff0c;认证后以后再打开不需要重复操作&#xff0c;如果重新安…...

【数据库系统概论】第三章关系数据库标准语言SQL

选择题会考&#xff1a; 1.数据查询&#xff1a; SELECT&#xff1a;用于选择需要查询的列和行。 FROM&#xff1a;用于指定要查询的表。 WHERE&#xff1a;用于指定查询条件。 GROUP BY&#xff1a;用于按照指定的列对结果进行分组。 HAVING&#xff1a;用于指定分组条件…...

云计算是什么?学习云计算能做什么工作?

很多人经常会问云计算是什么&#xff1f;云计算能干什么&#xff1f;学习云计算能做什么工作&#xff1f;其实我们有很多人并不知道云计算是什么&#xff0c;小知今天来给大家讲讲学习云计算能做什么。 中国的云计算行业目前正处于快速发展阶段&#xff0c;随着互联网和数字化…...

ES6 -- 模块化(CommonJS、AMD、ES Module)

模块模式 将代码拆分成独立的块&#xff0c;然后再将这些块连接起来可以通过模块模式来实现。这种模式背后的思想很简单&#xff1a;把逻辑分块&#xff0c;各自封装&#xff0c;相互独立&#xff0c;每个块自行决定对外暴露什么&#xff0c;同时自行决定引入执行哪些外部代码…...

c# xml 参数读取读取的简单使用

完整使用之测试参数的读取&#xff08;xml&#xff09; 保存一个xml文档&#xff08;如果没有就会生成一个默认的 里面的参数用的是我们默认设置的&#xff09;&#xff0c;之后每次更改里面的某项&#xff0c;然后保存 类似于重新刷新一遍。 这里所用的xml测试参数前面需要加…...

gym原来是这样用的

今天down了一个深度强化学习的程序&#xff0c;但是试来试去总是跑不成功&#xff0c;第一句就出问题了 env gym.make("clusterEnv-v0").unwrapped总是报没有该环境&#xff0c;思想半天&#xff0c;然后发现这是自己写的环境&#xff0c;需要到gym中去注册才能使用…...

百度SEO优化技巧与布局(提升网站排名的5种有效方法)

网站SEO关键词介绍&#xff1a; SEO&#xff08;SearchEngineOptimization&#xff09;即搜索引擎优化&#xff0c;是通过一系列技术手段和策略&#xff0c;让网站在搜索引擎中获得更好的排名和流量。关键词是SEO优化的重要组成部分&#xff0c;通过关键词布局合理&#xff0c…...

文案配音软件哪个好?(适合新手使用)

随着短视频的逐渐普及&#xff0c;视频博主越来越多&#xff0c;所以很多朋友也期待成为视频博主。但是&#xff0c;如果你想成为一个有名的视频博主&#xff0c;你需要在很多层面上比别人做得更好。其中之一就是视频文字的配音。相信大部分人都没有配音的技巧&#xff0c;所以…...

excel映射xml方法

excel映射xml方法 创建xml模板 新建一个文本文件&#xff0c;编写模板并命名为xxx.xml <?xml version"1.0" encoding"UTF-8"?> <root><item ID""><surname></surname><man></man><woman>&…...

2023/10/15

文章目录 1.uniapp之Vue2升Vue3值得注意的几点1.1 页面生命周期的使用1.2 引入资源的方式 2. 浏览器本地存储之Cookie和webStorage3. CSS变量 var()的用法4. CSS之实现线性渐变背景5. 图片无法和文字对齐的正确解决方案6. 使用正则处理接口返回的富文本内的图片7. transition实…...

Linux系统中如何开启和配置OpenGauss数据库的远程连接

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合…...

【Docker】Docker网络及容器间通信详解

目录 背景 默认网络 1、bridge 网络模式 2、host 网络模式 3、none 网络模式 4、container 网络模式 自定义网络 容器间网络通信 IP通信 Docker DNS server Joined容器 前言 本实验通过docker DNS server和joined 容器两种方法实现Docker容器间的通信。Docker容器间…...

TikTok国际版 使用特网科技Bluestacks模拟器安装方法

特网科技Bluestacks模拟器主机 桌面自带Bluestacks模拟器 TikTok国际版Bluestacks模拟器搜索tiktot 登录google应用商店-安装TikTok 安装过程可能需要3-5分钟不等-配置过低可能会导致安装失败&#xff0c;建议升级更高内存。 安装完成-打开 安装成功APP-我的游戏查看 打开国际版…...

【Hello Algorithm】暴力递归到动态规划(四)

动态规划的数组压缩技巧 - 机器人走格子问题 题目是leetcode62题目原题 表示如下 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中…...

arm day 8

arm 写一段按键中断代码 main.c #include "uart.h" #include "key_it.h" int main() {char c;char *s;uart4_init();//串口初始化//中断初始化key_it_config();while(1){//保证主程序不结束}return 0; } src/key_it.c #include"key_it.h"voi…...

k8s-14 存储之volumes

Volumes配置管理 容器中的文件在磁盘上是临时存放的&#xff0c;这给容器中运行的特殊应用程序带来一些问题。首先&#xff0c;当容器崩溃时&#xff0c;kubelet 将重新启动容器&#xff0c;容器中的文件将会丢失因为容器会以干净的状态重建。其次&#xff0c;当在一个 Pod 中…...

二分图博弈

一张二分图&#xff0c;Alice和Bob每人走一步&#xff0c;不能重复走&#xff0c;谁不能走谁输 结论&#xff1a;若存在最大匹配不包含初始点&#xff0c;则Bob赢&#xff0c;否则Alice赢 以上图为例&#xff0c;红色为最大匹配。 首先对于Alice第一步只能走黑边。而Alice无论…...

【C++】C++11—— 包装器

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】C11…...

LED显示屏高刷新率和低刷新率有什么区别

LED显示屏的刷新率是指图像在LED显示屏上更新的速度&#xff0c;也即屏幕上的图像每秒钟出现的次数&#xff0c;它的单位是赫兹&#xff08;Hz&#xff09;。LED显示屏的刷新率越高&#xff0c;图像闪烁感就越小&#xff0c;稳定性也就越高&#xff0c;换言之对视力的保护也越好…...

ReMe:为AI智能体构建长期记忆与上下文管理的开源框架

1. 项目概述与核心价值如果你正在构建或使用AI智能体&#xff08;Agent&#xff09;&#xff0c;并且被“金鱼记忆”问题困扰——比如对话一长&#xff0c;模型就忘了开头说了什么&#xff1b;或者每次新会话都像初次见面&#xff0c;完全记不住用户偏好和历史任务——那么ReMe…...

冠珠瓷砖×莫氏鸡煲×叠滘东胜东队,德叔有请,莫叔掌勺,“力撑”叠滘龙船传承

5月10日&#xff0c;2026叠滘龙船漂移大赛金牌合作伙伴冠珠瓷砖品牌代表、新明珠集团董事长叶德林“德叔”有请&#xff0c;莫氏鸡煲创始人“莫叔”掌勺&#xff0c;携火爆全网的莫氏祛湿鸡煲、紫洞黄皮酒&#xff0c;探班叠滘东胜东队训练场。当天下午&#xff0c;德叔、莫叔还…...

收藏 | 从零开始学大模型:6个月完整开发路线图(附免费资源)

本文提供一份从Python基础到企业级大模型应用开发的6-8个月学习路线图&#xff0c;涵盖API调用、提示词工程、RAG知识库问答、Agent智能体开发及模型微调部署。结合近百份招聘需求及专家建议&#xff0c;适合初学者快速构建AI技能体系&#xff0c;附有前沿拓展方向与免费学习资…...

IT68353:双DP 1.4 + HDMI 2.0 转 HDMI 2.0 单芯片KVM切换方案

一、前言多主机协同办公、电竞直播、工控监控、视频会议等场景&#xff0c;对4K60Hz高画质切换、键鼠共享、Type-C一线通、多路信号兼容、极简外围的需求持续攀升。传统KVM方案普遍采用多芯片拼凑架构&#xff0c;需要DP切换芯片、HDMI切换芯片、USB Hub、PD控制器、外置MCU等多…...

C++多线程编程:深入剖析std::thread的使用方法

一、线程std::thread简介std::thread 是 C11 中引入的一个库&#xff0c;用于实现多线程编程。它允许程序创建和管理线程&#xff0c;从而实现并发执行。std::thread 在 #include<thread>头文件中声明&#xff0c;因此使用 std::thread 时需要包含 #include<thread>…...

电子束光刻掩模误差建模与校正技术解析

1. 电子束光刻中的掩模误差来源解析在半导体制造领域&#xff0c;电子束光刻技术因其高分辨率特性而被广泛应用于掩模制作。然而&#xff0c;这一工艺过程中产生的掩模误差会直接影响最终芯片的图形精度和良率。理解这些误差的物理成因是进行有效校正的前提。1.1 电子散射效应的…...

AI智能体开发实战:从框架选型到部署优化的全流程指南

1. 项目概述与核心价值最近在探索AI智能体&#xff08;AI Agent&#xff09;和自动化工作流领域时&#xff0c;我反复被一个名字刷屏&#xff1a;AwesomeClaw。这个由CrayBotAGI团队开源的项目&#xff0c;在GitHub上迅速获得了大量关注。乍一看&#xff0c;它像是一个又一个“…...

工业AI系统安全防护与零信任架构

当工厂的"大门"不再只是一道铁门,安全该如何升级? 引言:从"大铁门"到"智能门禁" 想象一座传统工厂:四周围墙高耸,大门紧闭,保安大爷坐在门房里,凭工作证放行。这就是传统网络安全的写照——"围墙式"防御,相信"里面的人&…...

计算机专业不想“敲代码”,都来冲这个行业

计算机专业不想“敲代码”&#xff0c;都来冲这个行业 在这个信息爆炸的时代&#xff0c;计算机专业作为热门选择之一&#xff0c;吸引了无数学子的目光。但与此同时&#xff0c;也有相当一部分同学心存疑虑&#xff1a;自己是计算机专业的&#xff0c;却对写代码提不起兴趣&a…...

R3nzSkin英雄联盟皮肤修改器:终极免费皮肤体验完整指南

R3nzSkin英雄联盟皮肤修改器&#xff1a;终极免费皮肤体验完整指南 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin R3nzSkin是一款专为《英雄联盟》玩家设计的开源内存修改工具&#xff0…...