leetcode二叉树3

404.左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:

输入: root = [3,9,20,null,null,15,7] 
输出: 24 
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

示例 2:

输入: root = [1]
输出: 0

提示:

  • 节点数在 [1, 1000] 范围内
  • -1000 <= Node.val <= 1000

解题思路

通过递归遍历二叉树,识别并累加所有左叶子节点的值。使用一个标志变量 flag 区分当前节点是否为其父节点的左子节点,只有当节点是叶子节点且是左子节点时,才将其值加到全局变量 sum 中。主函数从根节点开始递归,特殊处理单节点树(根节点不算左叶子),最终返回总和。

代码 

class Solution {int sum = 0; // 定义全局变量,用于累加所有左叶子节点的值// 辅助函数:递归遍历二叉树,计算左叶子之和// root: 当前处理的节点// flag: 标记当前节点是左子节点(1)还是右子节点(0)public void fun1(TreeNode root, int flag) {// 如果当前节点是叶子节点(无左子节点且无右子节点)if (root.left == null && root.right == null) { // 检查是否是左叶子节点,只有 flag 为 1 时才累加if (flag == 1) {sum += root.val; // 将左叶子节点的值加到 sum 中}} else { // 如果不是叶子节点,继续递归处理子节点// 如果存在左子节点,递归调用并标记为左子节点 (flag=1)if (root.left != null) fun1(root.left, 1);// 如果存在右子节点,递归调用并标记为右子节点 (flag=0)if (root.right != null) fun1(root.right, 0);}}// 主函数:返回二叉树所有左叶子之和public int sumOfLeftLeaves(TreeNode root) {// 特殊情况:如果树只有一个节点(根节点是叶子),返回 0if (root.left == null && root.right == null) {return 0; // 根节点本身不算左叶子}fun1(root, 0); // 从根节点开始递归,根节点初始标记为 0(非左子节点)return sum; // 返回累加的结果}
}

513.找树左下角的值

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

示例 1:

输入: root = [2,1,3]
输出: 1

示例 2:

输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7

提示:

  • 二叉树的节点个数的范围是 [1,104]
  • -231 <= Node.val <= 231 - 1 

 

解题思路

通过层次遍历(BFS,广度优先搜索)找到二叉树的最底层,并记录每一层的最左节点值。由于层次遍历从左到右访问节点,每层的第一个节点即为最左节点,而最后一层的第一个节点即为最底层的最左节点。使用队列存储每层节点,遍历完所有层后,ans 保存的就是目标值。

代码 

class Solution {public int findBottomLeftValue(TreeNode root) {int ans = root.val; // 初始化答案为根节点的值,作为最底层最左节点的候选Queue<TreeNode> queue = new ArrayDeque<>(); // 创建队列,用于层次遍历queue.offer(root); // 将根节点加入队列,开始遍历// 当队列不为空时,继续层次遍历while (!queue.isEmpty()) {boolean flag = true; // 标志位,用于标记每层的最左节点int size = queue.size(); // 获取当前层的节点数// 遍历当前层的所有节点while (size-- > 0) {TreeNode node = new TreeNode(); // 创建一个临时节点对象(稍显冗余)node = queue.poll(); // 从队列中取出当前节点,覆盖临时对象if (flag) ans = node.val; // 如果是该层第一个节点,更新答案为当前节点值flag = false; // 标志位置为 false,确保只记录最左节点// 将左子节点加入队列(如果存在)if (node.left != null) queue.offer(node.left);// 将右子节点加入队列(如果存在)if (node.right != null) queue.offer(node.right);}}return ans; // 返回最底层最左节点的值}
}

112.路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

叶子节点 是指没有子节点的节点。

示例 1:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。

示例 2:

输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。

示例 3:

输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。

提示:

  • 树中节点的数目在范围 [0, 5000] 内
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

解题思路

通过深度优先搜索(DFS)递归遍历二叉树,从根节点到每个叶子节点计算路径和。每次递归时累加当前节点值,并在到达叶子节点时检查路径和是否等于目标值 targetSum。如果存在至少一条路径满足条件,则返回 true,否则返回 false。主函数处理空树情况,并启动递归过程。

代码 

class Solution {// 辅助函数:递归检查是否存在从当前节点到叶子节点的路径和等于目标值// root: 当前处理的节点// sum: 从根节点到当前节点的路径和// targetSum: 目标和public boolean fun1(TreeNode root, int sum, int targetSum) {// 如果当前节点为空,返回 false(空路径不满足条件)if (root == null) {return false;}// 将当前节点值加到路径和中sum += root.val;// 如果当前节点是叶子节点(无左子节点且无右子节点)if (root.left == null && root.right == null) {// 检查路径和是否等于目标和,若相等返回 trueif (sum == targetSum) return true;}// 递归检查左子树或右子树是否存在满足条件的路径// 使用 || 表示只要有一条路径满足条件即返回 truereturn fun1(root.left, sum, targetSum) || fun1(root.right, sum, targetSum);}// 主函数:判断是否存在从根节点到叶子节点的路径和等于目标值public boolean hasPathSum(TreeNode root, int targetSum) {// 特殊情况:如果树为空,返回 falseif (root == null) {return false;}// 调用辅助函数,从根节点开始,初始路径和为 0return fun1(root, 0, targetSum);}
}

113.路径总和II

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

叶子节点 是指没有子节点的节点。

示例 1:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

示例 2:

输入:root = [1,2,3], targetSum = 5
输出:[]

示例 3:

输入:root = [1,2], targetSum = 0
输出:[]

提示:

  • 树中节点总数在范围 [0, 5000] 内
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

解题思路

通过深度优先搜索(DFS)递归遍历二叉树,从根节点到每个叶子节点,记录路径并计算路径和。使用一个临时列表 list 保存当前路径,在到达叶子节点时检查路径和是否等于目标值 targetSum,若满足则将路径副本加入结果集 ans。通过回溯(移除当前节点值)确保路径记录的正确性,最终返回所有满足条件的路径。

代码 

class Solution {// 定义全局变量,用于存储所有满足条件的路径List<List<Integer>> ans = new ArrayList<>();// 辅助函数:递归遍历二叉树,寻找从根到叶子路径和等于目标值的路径// root: 当前处理的节点// sum: 从根节点到当前节点的路径和// targetSum: 目标和// list: 当前路径的临时记录public void fun1(TreeNode root, int sum, int targetSum, ArrayList list) {// 如果当前节点为空,直接返回(空路径不处理)if (root == null) {return;}// 将当前节点值加入临时路径list.add(root.val);// 更新路径和sum += root.val;// 如果当前节点是叶子节点(无左子节点且无右子节点)if (root.left == null && root.right == null) {// 检查路径和是否等于目标和if (sum == targetSum) {// 如果满足条件,将当前路径的副本加入结果集ans.add(new ArrayList<>(list));}} else {// 如果不是叶子节点,继续递归遍历左子树fun1(root.left, sum, targetSum, list);// 递归遍历右子树fun1(root.right, sum, targetSum, list);}// 回溯:移除当前节点值,以便尝试其他路径list.remove(list.size() - 1);}// 主函数:返回所有从根到叶子路径和等于目标值的路径public List<List<Integer>> pathSum(TreeNode root, int targetSum) {// 创建临时列表,用于记录当前路径ArrayList<Integer> list = new ArrayList<>();// 调用辅助函数开始递归fun1(root, 0, targetSum, list);// 返回结果集return ans;}
}

106.从中序与后序遍历构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。

示例 1:

输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]

示例 2:

输入:inorder = [-1], postorder = [-1]
输出:[-1]

提示:

  • 1 <= inorder.length <= 3000
  • postorder.length == inorder.length
  • -3000 <= inorder[i], postorder[i] <= 3000
  • inorder 和 postorder 都由 不同 的值组成
  • postorder 中每一个值都在 inorder 中
  • inorder 保证是树的中序遍历
  • postorder 保证是树的后序遍历

解题思路

利用后序遍历的最后一个元素作为根节点,通过中序遍历找到根节点的左右子树范围,递归构建二叉树。为了避免每次线性查找根节点在中序遍历中的位置,使用哈希表预先存储值到索引的映射,从而将查找时间从 O(n) 优化到 O(1)。通过递归划分数组范围,最终构造出完整的二叉树。

代码

class Solution {// 定义哈希表,用于快速查找中序遍历中值的索引private HashMap<Integer, Integer> inorderMap;// 辅助函数:根据中序和后序遍历递归构建二叉树// inorder: 中序遍历数组// postorder: 后序遍历数组// inStart, inEnd: 中序遍历的当前范围// postStart, postEnd: 后序遍历的当前范围private TreeNode buildTreeHelper(int[] inorder, int[] postorder, int inStart, int inEnd, int postStart, int postEnd) {// 如果当前范围无效,返回 null(无子树)if (inStart > inEnd) {return null;}// 后序遍历的最后一个元素是当前子树的根节点int rootVal = postorder[postEnd];TreeNode root = new TreeNode(rootVal);// 在中序遍历中找到根节点的索引int rootIndex = inorderMap.get(rootVal);// 计算左子树的节点数int leftSize = rootIndex - inStart;// 递归构建左子树root.left = buildTreeHelper(inorder, postorder, inStart, rootIndex - 1, postStart, postStart + leftSize - 1);// 递归构建右子树root.right = buildTreeHelper(inorder, postorder, rootIndex + 1, inEnd, postStart + leftSize, postEnd - 1);return root;}// 主函数:根据中序和后序遍历构造二叉树public TreeNode buildTree(int[] inorder, int[] postorder) {// 初始化哈希表,存储中序遍历值到索引的映射inorderMap = new HashMap<>();for (int i = 0; i < inorder.length; i++) {inorderMap.put(inorder[i], i);}// 调用辅助函数,初始范围为整个数组return buildTreeHelper(inorder, postorder, 0, inorder.length - 1, 0, postorder.length - 1);}
}// TreeNode 定义(假设已提供)
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}
}

105.从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:

输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]

示例 2:

输入: preorder = [-1], inorder = [-1]
输出: [-1]

提示:

  • 1 <= preorder.length <= 3000
  • inorder.length == preorder.length
  • -3000 <= preorder[i], inorder[i] <= 3000
  • preorder 和 inorder 均 无重复 元素
  • inorder 均出现在 preorder
  • preorder 保证 为二叉树的前序遍历序列
  • inorder 保证 为二叉树的中序遍历序列

 

解题思路

利用前序遍历的第一个元素作为根节点,通过中序遍历找到根节点的左右子树范围,递归构建二叉树。为了避免每次线性查找根节点在中序遍历中的位置,使用哈希表预先存储值到索引的映射,从而将查找时间从 O(n) 优化到 O(1)。通过递归划分数组范围,最终构造出完整的二叉树。

代码 

class Solution {// 定义哈希表,用于快速查找中序遍历中值的索引private HashMap<Integer, Integer> inorderMap;// 辅助函数:根据前序和中序遍历递归构建二叉树// inorder: 中序遍历数组// preorder: 前序遍历数组// inStart, inEnd: 中序遍历的当前范围// preStart, preEnd: 前序遍历的当前范围public TreeNode fun1(int[] inorder, int[] preorder, int inStart, int inEnd, int preStart, int preEnd) {// 如果当前范围无效(中序或前序范围不合法),返回 nullif (inEnd < inStart || preStart > preEnd) return null;// 前序遍历的第一个元素是当前子树的根节点TreeNode root = new TreeNode(preorder[preStart]);// 在中序遍历中找到根节点的索引(使用哈希表快速查找)int mid = inorderMap.get(root.val);// 计算左子树的节点数int leftSize = mid - inStart;// 递归构建左子树// 左子树的中序范围: [inStart, mid - 1]// 左子树的前序范围: [preStart + 1, preStart + leftSize]root.left = fun1(inorder, preorder, inStart, mid - 1, preStart + 1, preStart + leftSize);// 递归构建右子树// 右子树的中序范围: [mid + 1, inEnd]// 右子树的前序范围: [preStart + leftSize + 1, preEnd]root.right = fun1(inorder, preorder, mid + 1, inEnd, preStart + leftSize + 1, preEnd);// 返回当前子树的根节点return root;}// 主函数:根据前序和中序遍历构造二叉树public TreeNode buildTree(int[] preorder, int[] inorder) {// 如果输入数组为空或长度为 0,返回 nullif (inorder == null || inorder.length == 0) return null;// 初始化哈希表,存储中序遍历值到索引的映射inorderMap = new HashMap<>();for (int i = 0; i < inorder.length; i++) {inorderMap.put(inorder[i], i);}// 调用辅助函数,初始范围为整个数组return fun1(inorder, preorder, 0, inorder.length - 1, 0, preorder.length - 1);}
}// TreeNode 定义(假设已提供)
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}
}

 654.最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:

  1. 创建一个根节点,其值为 nums 中的最大值。
  2. 递归地在最大值 左边 的 子数组前缀上 构建左子树。
  3. 递归地在最大值 右边 的 子数组后缀上 构建右子树。

返回 nums 构建的 最大二叉树 

示例 1:

输入:nums = [3,2,1,6,0,5]
输出:[6,3,5,null,2,0,null,null,1]
解释:递归调用如下所示:
- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。- 空数组,无子节点。- [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1] 。- 空数组,无子节点。- 只有一个元素,所以子节点是一个值为 1 的节点。- [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 [] 。- 只有一个元素,所以子节点是一个值为 0 的节点。- 空数组,无子节点。

示例 2:

输入:nums = [3,2,1]
输出:[3,null,2,null,1]

提示:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000
  • nums 中的所有整数 互不相同

解题思路

通过递归分治的方式构建最大二叉树。每次在当前子数组范围内找到最大值作为根节点,然后将数组分为左子数组和右子数组,分别递归构建左子树和右子树。使用索引范围控制递归,确保正确划分子树,最终返回构造好的二叉树根节点。

代码 

class Solution {// 辅助函数:递归构建最大二叉树// nums: 输入的整数数组// start: 当前子数组的起始索引// end: 当前子数组的结束索引public TreeNode fun1(int[] nums, int start, int end) {// 如果当前范围无效(起始索引大于结束索引),返回 nullif (start > end) return null;// 创建当前子树的根节点TreeNode root = new TreeNode();int max = 0;    // 记录当前范围内的最大值int index = 0;  // 记录最大值的索引// 遍历当前范围,找到最大值及其索引for (int i = start; i <= end; i++) {if (max <= nums[i]) { // 使用 <= 确保更新到最后一个最大值index = i;        // 更新最大值索引max = nums[i];    // 更新最大值}}// 设置根节点值为最大值root.val = max;// 递归构建左子树(最大值左边的子数组)root.left = fun1(nums, start, index - 1);// 递归构建右子树(最大值右边的子数组)root.right = fun1(nums, index + 1, end);// 返回当前子树的根节点return root;}// 主函数:根据数组构造最大二叉树public TreeNode constructMaximumBinaryTree(int[] nums) {// 特殊情况:如果数组长度为 1,直接返回单节点树if (nums.length == 1) return new TreeNode(nums[0]);// 调用辅助函数,初始范围为整个数组return fun1(nums, 0, nums.length - 1);}
}

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

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

相关文章

QT网络通信的接口与使用

文章目录 前言1.服务端实现流程1.1步骤 1&#xff1a;创建 QTcpServer 并监听端口1.2步骤 2&#xff1a;处理新连接请求1.3步骤 3&#xff1a;接收客户端数据1.4步骤 4&#xff1a;处理客户端断开 2.客户端实现流程2.1步骤 1&#xff1a;创建 QTcpSocket 并连接服务器2.2步骤 2…

华为OD机试2025A卷七日集训第1期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)

目录 一、适合人群二、本期训练时间三、如何参加四、7日集训第1期五、精心挑选21道高频100分经典题目&#xff0c;作为入门。第1天、逻辑分析第2天、逻辑分析第3天、逻辑分析第4天、逻辑分析第5天、双指针第6天、二叉树第7天、回溯 六、集训总结六、国内直接使用最新GPT-4.5、满…

Qt 重入和线程安全

重入和线程安全 在整个文档中&#xff0c;"重入"和 "线程安全 "这两个术语被用来标记类和函数&#xff0c;以表明它们在多线程应用程序中的使用方式&#xff1a; 线程安全函数可以同时被多个线程调用&#xff0c;即使调用使用的是共享数据&#xff0c;因…

Elasticsearch:构建 AI 驱动的搜索体验

Elasticsearch 介绍 当你开始使用 Elastic 时&#xff0c;你将使用 Elasticsearch Relevance Engine™&#xff08;ESRE&#xff09;&#xff0c;它专为 AI 搜索应用程序提供支持。借助 ESRE&#xff0c;你可以利用一整套开发者工具&#xff0c;包括 Elastic 的文本搜索、向量…

鸿蒙生态开发

鸿蒙生态开发概述 鸿蒙生态是华为基于开源鸿蒙&#xff08;OpenHarmony&#xff09;构建的分布式操作系统生态&#xff0c;旨在通过开放共享的模式连接智能终端设备、操作系统和应用服务&#xff0c;覆盖消费电子、工业物联网、智能家居等多个领域。以下从定义与架构、核心技术…

JVM如何处理Java中的精度转换: 从源码到字节码

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

vue-next-admin修改配置指南

官方文档地址&#xff1a;vue-next-admin 1.如何开启侧边栏logo 在scr-layout-navbars-topBar-setings.vue中添加 getThemeConfig.value.isShowLogo true; 设置为true即可默认打开 2.修改侧边栏顶部的logo与文字 先把想要的图标存到我的项目然后下载 然后把后面的几个文件拉…

gin学习

gin学习笔记&#xff0c;不仅包含了基本的增删查改外&#xff0c;还包括参数传递&#xff0c;上传下载&#xff0c;模版、session与中间件等&#xff0c;方便收藏自习可用 文章目录 获得个请求get打印字符串get请求xmlget请求跳转http方法路由可以通过Context的Param方法来获取…

Flutter运行错误:UG! exception in phase ‘semantic analysis‘

最近在Mac Mini M4上通过Android Studio导入Flutter项目并运行&#xff0c;结果一直跑不起来&#xff0c;错误日志如下&#xff1a; 执行命令查看版本信息&#xff1a; flutter doctor --verbose通过输出信息Java version OpenJDK Runtime Environment (build 21.0.41242208…

【计算机网络运输层详解】

文章目录 一、前言二、运输层的功能1. 端到端通信2. 复用与分用3. 差错检测4. 流量控制5. 拥塞控制 三、运输层协议&#xff1a;TCP 和 UDP1. TCP&#xff1a;面向连接的可靠传输协议2. UDP&#xff1a;无连接的传输协议 四、端口号与进程通信1. 端口号分类2. 端口通信模型 五、…

51单片机和STM32 入门分析

51单片机和STM32是嵌入式开发中两种主流的微控制器&#xff0c;它们在架构、性能、应用场景等方面存在显著差异。以下是两者的对比分析及选择建议&#xff1a; 1. 51单片机与STM32的定义与特点 51单片机 定义&#xff1a;基于Intel 8051内核的8位微控制器&#xff0c;结构简单…

开源视觉语言模型MiniMax-VL-01:动态分辨率+4M超长文本,性能比肩GPT-4o

在人工智能领域&#xff0c;构建能够像人类一样理解、思考和行动的智能体&#xff08;AI Agent&#xff09;一直是研究人员的终极目标之一。而实现这一目标的关键在于模型是否具备足够强大的感知能力、记忆能力和推理能力。近期&#xff0c;国内人工智能公司MiniMax重磅开源了其…

excel 列单元格合并(合并列相同行)

代码 首先自定义注解CellMerge&#xff0c;用于标记哪些属性需要合并&#xff0c;哪个是主键**&#xff08;这里做了一个优化&#xff0c;可以标记多个主键&#xff09;** import org.dromara.common.excel.core.CellMergeStrategy;import java.lang.annotation.*;/*** excel…

flowable适配达梦7 (2.1)

经过第一版的问题解决&#xff0c;后端项目可以启动&#xff0c;前端页面也集成进去。 前端在流程设计页面报错 之后发现主要是组件中modelerStore这个值没有 解决方法:在data增加对象 给component/process/designer.vue 中涉及到的每个子组件传入 :modelerStore“modeler…

Prometheus Exporter系列-Mysql_Exporter一键部署

新项目旧项目都需要给研发配置mysql监控&#xff0c;这里mysql监控对应aws 阿里云 腾讯云 华为云的云mysql产品或开源自建mysql。 exporter安装虽然简单&#xff0c;经常手动操作不免让人心烦&#xff0c;一键完成省去繁琐的常规操作。 配置信息对的情况下测试多次都可以正常安…

2025年移动端开发性能优化实践与趋势分析

启动速度优化 本质&#xff1a;缩短首次可见帧渲染时间。 方法&#xff1a; iOS&#xff1a;利用Core ML本地模型轻量化部署&#xff0c;减少云端等待。Android&#xff1a;强制启用SplashScreen API&#xff0c;通过setKeepOnScreenCondition控制动画时长。冷启动需将耗时操…

【MySQL篇】DEPENDENT SUBQUERY(依赖性子查询)优化:从百秒到秒级响应的四种优化办法

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…

全文 - MLIR Toy Tutorial Chapter 1: Toy Language and AST

Toy 语言 本教程&#xff0c;将会借助一个玩具语言来讲解&#xff0c;这个语言我们称其为 Toy。Toy 是一个基于张量的语言&#xff0c;它允许你定义函数&#xff0c;执行一些数学计算&#xff0c;并且打印结果。做这样的设定&#xff0c;是因为我们希望让教程保持简明&#xff…

排序复习_代码纯享

头文件 #pragma once #include<iostream> #include<vector> #include<utility> using std::vector; using std::cout; using std::cin; using std::endl; using std::swap;//插入排序 //1、直接插入排序&#xff08;稳定&#xff09; void InsertSort(vecto…

CSS语言的双向链表

CSS语言的双向链表 引言 在计算机科学中&#xff0c;数据结构是一个极为重要的概念&#xff0c;而链表则是最常见的数据结构之一。链表可以分为单向链表和双向链表&#xff0c;其中双向链表因其灵活性和高效性而受到广泛应用。在前端开发的领域&#xff0c;尤其是CSS&#xf…