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

代码随想录 二叉树第三周

目录

404.左叶子之和

513.找树左下角的值

112.路径总和

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

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

654.最大二叉树


404.左叶子之和

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

递归法

 定义一个前驱指针指向要处理的节点的父节点,此时可判断该节点是否是左子节点

/*** Definition for a binary tree node.* 二叉树节点的定义* public class TreeNode {*     int val; // 节点值*     TreeNode left; // 左子节点*     TreeNode right; // 右子节点*     TreeNode() {} // 默认构造函数*     TreeNode(int val) { this.val = val; } // 带值的构造函数*     TreeNode(int val, TreeNode left, TreeNode right) { // 带值和子节点的构造函数*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {// 计算左叶子节点的和public int sumOfLeftLeaves(TreeNode root) {// 初始调用 leftLeavesSum 方法,传入 null 作为前一个节点int sum = leftLeavesSum(null, root); return sum; // 返回左叶子节点的和}// 递归计算左叶子节点的和public int leftLeavesSum(TreeNode pre, TreeNode root) {if(root == null){ // 如果当前节点为空,返回 0return 0;}int middleSum = 0; // 用于累加左叶子节点的和// 如果当前节点是左叶子节点且前一个节点不为空且是当前节点的父节点if(root.left == null && root.right == null && pre != null && pre.left == root){middleSum += root.val; // 将当前节点值加入到左叶子节点的和中return middleSum; // 返回当前节点值作为左叶子节点的和}// 递归计算左子树的左叶子节点的和int leftSum = leftLeavesSum(root, root.left);// 递归计算右子树的左叶子节点的和int rightSum = leftLeavesSum(root, root.right);// 返回左叶子节点的和,包括左子树、右子树和当前节点的和return middleSum + leftSum + rightSum;}
}

迭代法

// 层序遍历迭代法
class Solution {public int sumOfLeftLeaves(TreeNode root) {int sum = 0; // 初始化左叶子节点的和if (root == null) return 0; // 如果根节点为空,返回0Queue<TreeNode> queue = new LinkedList<>(); // 创建一个队列用于层序遍历queue.offer(root); // 将根节点加入队列while (!queue.isEmpty()) { // 当队列不为空时,继续遍历int size = queue.size(); // 获取当前层的节点数while (size-- > 0) { // 遍历当前层的所有节点TreeNode node = queue.poll(); // 从队列中取出一个节点if (node.left != null) { // 如果左节点不为空queue.offer(node.left); // 将左节点加入队列if (node.left.left == null && node.left.right == null){ // 判断左节点是否为叶子节点sum += node.left.val; // 如果是左叶子节点,则将其值加入到和中}}if (node.right != null) queue.offer(node.right); // 将右节点加入队列}}return sum; // 返回左叶子节点的和}
}

513.找树左下角的值

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 

递归法: 

同一深度的情况下,由于左子树先于右子树遍历,故左侧节点先被更新到value中,而同一层其他节点不会被更新

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/// 解题思路:
// 使用深度优先搜索(DFS)来遍历二叉树,记录最左侧叶子节点的值以及其深度,
// 若当前叶子节点的深度大于已记录的最大深度,则更新最左侧叶子节点的值和深度,
// 最终返回最左侧叶子节点的值。class Solution {int maxDepth = -1; // 初始化最大深度为-1int value = 0; // 初始化最左侧叶子节点的值为0public int findBottomLeftValue(TreeNode root) {leftValue(root, 0); // 调用递归函数return value; // 返回最左侧叶子节点的值}// 递归函数,用于寻找最左侧叶子节点的值public void leftValue(TreeNode root, int depth) {if (root == null) { // 如果当前节点为空,直接返回return;}if (root.left == null && root.right == null && depth > maxDepth) { // 当前节点为叶子节点且深度大于最大深度value = root.val; // 更新最左侧叶子节点的值maxDepth = depth; // 更新最大深度}leftValue(root.left, depth + 1); // 递归遍历左子树,深度加1leftValue(root.right, depth + 1); // 递归遍历右子树,深度加1}
}

 迭代法

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {  // findBottomLeftValue方法,接受一个二叉树的根节点作为参数,返回最底层最左边节点的值。  public int findBottomLeftValue(TreeNode root) {  // 创建一个队列,用于层序遍历二叉树。  Queue<TreeNode> queue = new LinkedList<>();  // 将根节点加入队列。  queue.offer(root);  // 初始化结果变量,用于存储最底层最左边节点的值。  int res = 0;  // 当队列不为空时,进行循环。  while (!queue.isEmpty()) {  // 获取当前层的节点数量。  int size = queue.size();  // 遍历当前层的所有节点。  for (int i = 0; i < size; i++) {  // 取出队列中的一个节点。  TreeNode poll = queue.poll();  // 如果是当前层的第一个节点(即最左边的节点),则更新结果变量的值。  if (i == 0) {  res = poll.val;  }  // 如果该节点有左子节点,则将左子节点加入队列。  if (poll.left != null) {  queue.offer(poll.left);  }  // 如果该节点有右子节点,则将右子节点加入队列。  if (poll.right != null) {  queue.offer(poll.right);  }  }  }  // 返回结果变量的值,即最底层最左边节点的值。  return res;  }  
}

112.路径总和

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

 递归法:

 采用前序遍历,没到一个节点就将targetSum减去该节点的val,如果是根节点的话判断条件并返回,不是根节点的话向左右子树遍历

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
// 定义一个Solution类  
class Solution {  // hasPathSum方法,接受一个二叉树的根节点root和一个目标值targetSum作为参数  // 返回值为boolean类型,表示是否存在从根节点到叶子节点的路径,使得路径上所有节点的值之和等于targetSum  public boolean hasPathSum(TreeNode root, int targetSum) {  // 如果根节点为空(即二叉树为空树),则不存在任何路径,返回false  if(root == null){  return false;  }  // 从目标值中减去当前节点的值,更新目标值  targetSum -= root.val;  // 如果当前节点是叶子节点(即没有左子节点和右子节点)  if(root.left == null && root.right == null){  // 如果更新后的目标值为0,说明从根节点到当前叶子节点的路径上所有节点的值之和正好等于targetSum  if(targetSum == 0){  return true;  }else{  // 如果不等于0,则说明不存在符合条件的路径,返回false  return false;  }   }  // 如果当前节点不是叶子节点,则递归地对左子树和右子树调用hasPathSum方法  // leftResult表示左子树中是否存在符合条件的路径  boolean leftResult = hasPathSum(root.left,targetSum);  // rightResult表示右子树中是否存在符合条件的路径  boolean rightResult = hasPathSum(root.right,targetSum);  // 如果左子树或右子树中存在符合条件的路径,则返回true;否则返回false  return leftResult || rightResult;  }  
}

 迭代法:

// 定义一个Solution类  
class Solution {  // hasPathSum方法,接受一个二叉树的根节点root和一个目标值targetSum作为参数  // 返回值为boolean类型,表示是否存在从根节点到叶子节点的路径,使得路径上所有节点的值之和等于targetSum  public boolean hasPathSum(TreeNode root, int targetSum) {  // 如果根节点为空(即二叉树为空树),则不存在任何路径,返回false  if(root == null){  return false;  }  // 创建两个队列,一个用于存储节点,另一个用于存储从根节点到当前节点的路径和  Queue<TreeNode> treeNode = new LinkedList<>();  Queue<Integer> count = new LinkedList<>();  // 将根节点和初始的路径和(即目标值)加入队列  treeNode.offer(root);  count.offer(targetSum);  // 使用while循环进行层序遍历,直到节点队列或路径和队列为空  while(!treeNode.isEmpty() && !count.isEmpty()){  // 取出队列中的节点和对应的路径和  TreeNode node = treeNode.poll();  int countRes = count.poll() - node.val; // 更新路径和,减去当前节点的值  // 如果当前节点是叶子节点(即没有左子节点和右子节点),并且路径和等于0  // 则说明找到了一个从根节点到叶子节点的路径,其路径上所有节点的值之和等于targetSum  if(node.left == null && node.right == null && countRes == 0){  return true;  }  // 如果当前节点有左子节点,则将左子节点和更新后的路径和加入队列  if(node.left != null){  treeNode.offer(node.left);  count.offer(countRes);  }  // 如果当前节点有右子节点,则将右子节点和更新后的路径和加入队列  if(node.right != null){  treeNode.offer(node.right);  count.offer(countRes);  }  }  // 如果遍历完所有节点后仍未找到符合条件的路径,则返回false  return false;  }  
}

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

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 保证是树的后序遍历
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) {//因为每次都从postorder中取元素,所以当postorder为空的时候就返回nullif(postorder.length == 0){return null;} //取后序遍历的最后一个节点,即中,作为节点元素int nodeValue = postorder[postorder.length - 1];TreeNode node = new TreeNode(nodeValue);//找到后序数组最后一个元素在中序数组中的位置,即中间节点的位置,作为切割点int middleindex;for(middleindex = 0;middleindex < postorder.length - 1; middleindex ++){if(inorder[middleindex] == nodeValue){break;}}//切割中序数组,找到左子树的中序数组和右子树的中序数组//中间节点之前的,即左子树int[] leftInorder = Arrays.copyOfRange(inorder,0,middleindex);//中间节点之后的,即右子树int[] rightInorder = Arrays.copyOfRange(inorder,middleindex + 1,inorder.length);//切割后序数组,找到左子树的后序数组和右子树的后序数组//删除已经操作过的后序数组的最后一个元素postorder = Arrays.copyOfRange(postorder,0,postorder.length - 1);int[] leftPostorder = Arrays.copyOfRange(postorder,0,middleindex);int[] rightPostorder = Arrays.copyOfRange(postorder,middleindex,postorder.length);// 递归地构建左子树和右子树,并将它们分别设置为当前节点的左孩子和右孩子node.left = buildTree(leftInorder,leftPostorder);node.right = buildTree(rightInorder,rightPostorder);return node;}
}

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

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 保证 为二叉树的中序遍历序列
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {//由于每次都是从前序数组中取元素,当前序数组为空时,返回nullif(preorder.length == 0){return null;}//当前序数组不为空时,从中取得第一个元素作为中间节点int nodeValue = preorder[0];TreeNode node = new TreeNode(nodeValue);//找到该中间节点(即第一个元素)在中序数组中的位置int middleIndex;for(middleIndex = 0;middleIndex < inorder.length - 1;middleIndex ++){if(inorder[middleIndex] == nodeValue){break;}}//切割中序数组,分为左子树的中序数组和右子树的中序数组int[] leftInorder = Arrays.copyOfRange(inorder,0,middleIndex);int[] rightInorder = Arrays.copyOfRange(inorder,middleIndex + 1,inorder.length);//切割前序数组,分为左子树的前序数组和右子树的前序数组//先删除数组中已经取出的中间节点preorder = Arrays.copyOfRange(preorder,1,preorder.length);int[] leftPreorder = Arrays.copyOfRange(preorder,0,middleIndex);int[] rightPreorder = Arrays.copyOfRange(preorder,middleIndex,preorder.length);// 递归地构建左子树和右子树,并将它们分别设置为当前节点的左孩子和右孩子node.left = buildTree(leftPreorder,leftInorder);node.right = buildTree(rightPreorder,rightInorder);return node;}
}

654.最大二叉树

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 中的所有整数 互不相同

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {  // 返回构建好的最大二叉树的根节点  public TreeNode constructMaximumBinaryTree(int[] nums) {  // 如果数组为空,则返回null,因为不能构建二叉树  if(nums.length == 0){  return null;  }  // 初始化最大值和最大值的索引为-1和0  int max = -1;  int maxIndex = 0;  // 遍历数组,找到最大值及其索引  for(int i = 0; i < nums.length; i++){  if(nums[i] > max){  max = nums[i];  maxIndex = i;  }  }  // 创建一个新的树节点,值为数组中的最大值  TreeNode node = new TreeNode(max);  // 使用Arrays类的copyOfRange方法,复制最大值左边的部分数组作为左子树的输入数组  int[] leftNums = Arrays.copyOfRange(nums, 0, maxIndex);  // 使用Arrays类的copyOfRange方法,复制最大值右边的部分数组作为右子树的输入数组  int[] rightNums = Arrays.copyOfRange(nums, maxIndex + 1, nums.length);  // 递归地构建左子树和右子树,并将它们分别设置为当前节点的左孩子和右孩子  node.left = constructMaximumBinaryTree(leftNums);  node.right = constructMaximumBinaryTree(rightNums);  // 返回构建好的最大二叉树的根节点  return node;  }  
}

相关文章:

代码随想录 二叉树第三周

目录 404.左叶子之和 513.找树左下角的值 112.路径总和 106.从中序与后序遍历构造二叉树 105.从前序与中序遍历序列构造二叉树 654.最大二叉树 404.左叶子之和 404. 左叶子之和 简单 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输…...

flask流式输出-SSE服务

一、定义 flask demo前端遇到的问题 二、实现 flask demo from gevent import monkey monkey.patch_all() #并行 import time from flask import Response, stream_with_context from flask import Flask from gevent.pywsgi import WSGIServer from flask import …...

注解整理ing

注解 1. 实体类注解 Data注解是lombok.jar包下的注解&#xff0c;该注解通常用在实体bean上&#xff0c;不需要写出set和get方法 Data相当于Getter Setter RequiredArgsConstructor ToString EqualsAndHashCode这5个注解的合集 EqualsAndHashCode注解会生成equals(Object oth…...

Android 将图片网址url转化为bitmap

1. 图片网址url转化为bitmap 1.1. 方法一 通过 HttpURLConnection 请求 要使用一个线程去访问&#xff0c;因为是网络请求&#xff0c;这是一个一步请求&#xff0c;不能直接返回获取&#xff0c;要不然永远为null&#xff0c;在这里得到BitMap之后记得使用Hanlder或者EventBu…...

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:颜色渐变)

设置组件的颜色渐变效果。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 linearGradient linearGradient(value: { angle?: number | string; direction?: GradientDirection; colors: Array; repea…...

腾讯云幻兽帕鲁游戏存档迁移教程,本地单人房迁移/四人世界怎么迁移存档?

腾讯云幻兽帕鲁游戏存档迁移的方法主要包括以下几个步骤&#xff1a; 登录轻量云控制台&#xff1a;首先&#xff0c;需要登录到轻量云控制台&#xff0c;这是进行存档迁移的前提条件。在轻量云控制台中&#xff0c;可以找到接收存档的服务器卡片&#xff0c;并点击进入实例详情…...

C2_W2_Assignment_吴恩达_中英_Pytorch

Neural Networks for Handwritten Digit Recognition, Multiclass In this exercise, you will use a neural network to recognize the hand-written digits 0-9. 在本次练习中&#xff0c;您将使用神经网络来识别0-9的手写数字。 Outline 1 - Packages 2 - ReLU Activatio…...

C语言实现航班管理

航班管理系统&#xff0c;用C语言实现&#xff0c;可以作为课程设计&#xff0c;代码如下&#xff1a; #include<iostream> #include<fstream> #include<vector> #include<string> #include<stdlib.h> using namespace std; //信息基类 clas…...

【Java面试题】SpringBoot与Spring的区别

主要区别体现几个方面&#xff1a; 1.操作简便性 SpringBoot提供极其快速和简化的操作&#xff0c;使得Spring开发者能更快速上手。它通过提供spring的运行配置&#xff0c;以及为通用spring项目提供许多非功能性特性&#xff0c;进一步简化了开发过程。 2.框架扩展性 Spri…...

网络编程(IP、端口、协议、UDP、TCP)【详解】

目录 1.什么是网络编程&#xff1f; 2.基本的通信架构 3.网络通信三要素 4.UDP通信-快速入门 5.UDP通信-多发多收 6.TCP通信-快速入门 7.TCP通信-多发多收 8.TCP通信-同时接收多个客户端 9.TCP通信-综合案例 1.什么是网络编程&#xff1f; 网络编程是可以让设…...

Linux线程(二)----- 线程控制

目录 前言 一、线程资源区 1.1 线程私有资源 1.2 线程共享资源 1.3 原生线程库 二、线程控制接口 2.1 线程创建 2.1.1 创建一批线程 2.2 线程等待 2.3 终止线程 2.4 线程实战 2.5 其他接口 2.5.1 关闭线程 2.5.2 获取线程ID 2.5.3 线程分离 三、深入理解线程 …...

Linux 内核irq_stack遍历

环境Centos 4.18.0-80.el8.x86_64 一、x86架构堆栈类型说明 https://www.kernel.org/doc/Documentation/x86/kernel-stacks int get_stack_info(unsigned long *stack, struct task_struct *task,struct stack_info *info, unsigned long *visit_mask) {if (!stack)goto unk…...

GIT问题记录

一、 1.Gitee相关 复现步骤&#xff1a;自己在gitee上使用WEB解决冲突&#xff0c;本地未拉取最新的origin分支&#xff0c;然后本地也做了其他的修改&#xff0c;然后commit并且push&#xff0c;push时候报错&#xff0c;本地分支不干净 尝试拉取origin的最新内容&#xff…...

AzerothCore安装记录

尝试在FreeBSD系统下安装AzerothCore 首先安装相关软件 pkg install cmake mysql80-server boost-all装完mysql之后提示&#xff1a; MySQL80 has a default /usr/local/etc/mysql/my.cnf, remember to replace it with your own or set mysql_optfile"$YOUR_CNF_FILE i…...

Infineon_TC264智能车代码初探及C语言深度学习(一)

本篇文章记录我在智能车竞赛中&#xff0c;对 Infineon_TC264 这款芯片的底层库函数的学习分析。通过深入地对其库函数进行分析&#xff0c;C语言深入的知识得以再次在编程中呈现和运用。故觉得很有必要在此进行记录一下。 目录 ​编辑 一、代码段 1、枚举类型 2、结构体 …...

[Redis]——初识Redis

一、Redis为非关系型数据库 ❓我们常见的MySQL、SQLServer都是关系型数据库&#xff0c;那他们之间有什么区别与联系呢&#xff1f; &#x1f4d5;关系型数据库与非关系型数据库的区别&#xff08;面试题&#xff09; 解释&#xff1a; SQL数据库中的表是有结构的&#xff0c;包…...

YTM32的同步串行通信外设SPI外设详解(Master Part)

YTM32的同步串行通信外设SPI外设详解&#xff08;Master Part&#xff09; 文章目录 YTM32的同步串行通信外设SPI外设详解&#xff08;Master Part&#xff09;IntroductionFeatures引脚信号时钟源其它不常用功能 Pricinple & Mechinism基于FIFO的命令和数据管理机制锁定配…...

【C语言】三子棋

前言&#xff1a; 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#xff0c;率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小&#xff0c;三子棋在很多时候会出现和…...

Web组态可视化编辑器 快速绘制组态

随着工业智能制造的发展&#xff0c;工业企业对设备可视化、远程运维的需求日趋强烈&#xff0c;传统的单机版组态软件已经不能满足越来越复杂的控制需求&#xff0c;那么实现Web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说&#xff0c;将单机版软件转变…...

WebServer -- 注册登录

目录 &#x1f349;整体内容 &#x1f33c;流程图 &#x1f382;载入数据库表 提取用户名和密码 &#x1f6a9;同步线程登录注册 补充解释 代码 &#x1f618;页面跳转 补充解释 代码 &#x1f349;整体内容 概述 TinyWebServer 中&#xff0c;使用数据库连接池实现…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...