当前位置: 首页 > 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;使用数据库连接池实现…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

前端调试HTTP状态码

1xx&#xff08;信息类状态码&#xff09; 这类状态码表示临时响应&#xff0c;需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分&#xff0c;客户端应继续发送剩余部分。 2xx&#xff08;成功类状态码&#xff09; 表示请求已成功被服务器接收、理解并处…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...