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

【数据结构】 二叉树面试题讲解->贰

文章目录

  • 🌏引言
  • 🎄[二叉树遍历](https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId=60&&tqId=29483&rp=1&ru=/activity/oj&qru=/ta/tsing-kaoyan/question-ranking)
    • 🐱‍👤题目描述:
      • 📌输入描述:
      • 📌输出描述:
    • 🐱‍🐉示例:
    • 🐱‍👓思路解析:
    • 🐱‍🏍完整代码实现:
  • 🌳[二叉树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/)
    • 🐱‍👤题目描述:
    • 🐱‍🐉示例:
      • 📌示例一
    • 📌示例二
    • 🐱‍👓思路解析
      • 🚩思路一
    • 🚩思路二
    • 🐱‍🏍代码实现:
      • 🎈思路一代码实现
      • 🎈思路二代码实现
  • 🎍[从前序与中序遍历序列构造二叉树](https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/)
    • 🐱‍👤题目描述
    • 🐱‍🐉示例:
    • 🐱‍👓思路解析:
    • 🐱‍🏍代码实现:
  • 🌲拓展——[从中序与后序遍历序列构造二叉树](https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/%E3%80%81)
  • ⭕总结

🌏引言

二叉树的操作算法是笔试面试中较为常见的题目。
本文将着重介绍平时面试中常见的关于二叉树的应用题目,马上要进行秋招了。希望对你们有帮助 _😀
在这里插入图片描述

🎄二叉树遍历

🐱‍👤题目描述:

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

📌输入描述:

输入包括1行字符串,长度不超过100。

📌输出描述:

可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。

🐱‍🐉示例:

输入: abc##de#g##f###
输出:c b e g d f a

🐱‍👓思路解析:

首先我们先来看一下示例输入的二叉树的形状
在这里插入图片描述
我们首先需要做的是创建一个二叉树类,用于建立一个新的二叉树

class TreeNode1 {char val;TreeNode1 left;TreeNode1 right;TreeNode1() {}TreeNode1(char val) {this.val = val;}TreeNode1(char val, TreeNode1 left, TreeNode1 right) {this.val = val;this.left = left;this.right = right;}
}

接下来我们需要

  • 依旧采用递归的思想
  • 对字符串的每一个元素进行遍历,并进行判断
  • 在遍历时,我们创建一个静态变量为size,此后每遍历一个元素,size就++
  • 若不为’#',则该结点设为根节点
  • 并且size++;
  • 然后因为是前序遍历,所以根节点后面应该是左子树,然后是右子树
  • 若为’#',则该节点为null,我们只需要size++即可
  • 最后返回该结点就好

代码实现如下:

    public static TreeNode1 creatTree(String str) {TreeNode1 root = null;if (str.charAt(i) != '#') {root = new TreeNode1(str.charAt(i));i++;root.left = creatTree(str);root.right = creatTree(str);} else {i++;}return root;}

然后根据题意我们还需要进行一个中序遍历,这里我就不做赘述了,又不懂的小伙伴可以去看一下博主对于【数据结构】二叉数的存储与基本操作的实现的讲解

实现如下:

public static void inorder(TreeNode1 root) {if (root == null) {return;}inorder(root.left);System.out.print(root.val + " ");inorder(root.right);}
}

🐱‍🏍完整代码实现:

import java.util.Scanner;
class TreeNode1 {char val;TreeNode1 left;TreeNode1 right;TreeNode1() {}TreeNode1(char val) {this.val = val;}TreeNode1(char val, TreeNode1 left, TreeNode1 right) {this.val = val;this.left = left;this.right = right;}
}
public class Main {public static int i = 0;public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 casei = 0;String st = in.nextLine();TreeNode1 root = new TreeNode1();root = creatTree(st);inorder(root);}}public static TreeNode1 creatTree(String str) {TreeNode1 root = null;if (str.charAt(i) != '#') {root = new TreeNode1(str.charAt(i));i++;root.left = creatTree(str);root.right = creatTree(str);} else {i++;}return root;}public static void inorder(TreeNode1 root) {if (root == null) {return;}inorder(root.left);System.out.print(root.val + " ");inorder(root.right);}
}

🌳二叉树的最近公共祖先

🐱‍👤题目描述:

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {}

🐱‍🐉示例:

📌示例一

在这里插入图片描述

📌示例二

在这里插入图片描述

🐱‍👓思路解析

本题博主提供两种解题思路

🚩思路一

我们发现:

  • 如果p,q不是根节点,且p,q一个在左子树被找到,一个在右子树被找到
  • 那么该根节点为最近公共祖先
  • 在这里插入图片描述
  • 若该根节点为p或者q,那么自身则为最近祖先
    在这里插入图片描述
    若最后都没有找到,说明没有,返回空

🚩思路二

我们建立两个栈:

  • 栈1用于存储找到p结点的路径
  • 栈2用于存储找到q结点的路径
    在这里插入图片描述
  • 然后我们对两个栈求长度,把栈长度比较长的栈进行出栈,直到两个栈长度相等
  • 然后同时出栈进行一一比对,相同则为p、q的最近公共祖先
    在这里插入图片描述
    这种思路的解题难点在于如何找到p、q的路径并放入栈中,博主采用的做法如下:
  • 首先我们对二叉树与所找p、q结点进行判断
  • 若为空返回false
  • 然后我们需要对当前根节点进行判断,若为我们要找的p或q
  • 则返回true
  • 若没有我们便对该根节点的左子树进行入栈并进行判断,若找到返回true
  • 若没有找到则将该左子树进行出栈
  • 然后对右子树进行同样操作
  • 最后若都没找到,返回false

然后我们只需要对两栈元素进行出栈进行比对就好了,最先相等的就为我们的最近公共祖先

🐱‍🏍代码实现:

🎈思路一代码实现

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(p == root || q == root) {return root;}if(root == null) {return null;}TreeNode l = lowestCommonAncestor(root.left,p,q);TreeNode r = lowestCommonAncestor(root.right,p,q);if(l != null && r != null) {return root;} else if(l != null) {return l;} else if(r != null) {return r;}return null;}
}

🎈思路二代码实现

class Solution {public boolean getPath(TreeNode root, TreeNode node,Deque<TreeNode> stack) {if(root == null || node == null)return false;stack.push(root);//放完之后 要检查if(root == node) return true;boolean ret1 = getPath(root.left,node,stack);if(ret1) return true;boolean ret2 = getPath(root.right,node,stack);if(ret2) return true;stack.pop();return false;}public TreeNode lowestCommonAncestor2(TreeNode root, TreeNode p, TreeNode q) {//1、两个栈当中 存储好数据Deque<TreeNode> stack1 = new LinkedList<>();getPath(root,p,stack1);Deque<TreeNode> stack2 = new LinkedList<>();getPath(root,q,stack2);//2、判断栈的大小int size1 = stack1.size();int size2 = stack2.size();if(size1 > size2) {int size = size1-size2;while (size != 0) {stack1.pop();size--;}}else {int size = size2-size1;while (size != 0) {stack2.pop();size--;}}//栈里面数据的个数 是一样的while (!stack1.isEmpty() && !stack2.isEmpty()) {if(stack1.peek() != stack2.peek()) {stack1.pop();stack2.pop();}else {return stack1.peek();}}return null;}
}

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

🐱‍👤题目描述

给定两个整数数组 preorder 和 inorder ,其中 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) {}
}

🐱‍🐉示例:

在这里插入图片描述

🐱‍👓思路解析:

我们知道前序遍历里面第一个存储的是我们的根节点

那我们就可以在我们中序遍历中找到该结点,则该结点两边就为该根节点的左右子树
对于任意一颗树而言,前序遍历的形式总是

[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]

即根节点总是前序遍历中的第一个节点。而中序遍历的形式总是

[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]

只要我们在中序遍历中定位到根节点,那么我们就可以分别知道左子树和右子树中的节点数目。由于同一颗子树的前序遍历和中序遍历的长度显然是相同的,因此我们就可以对应到前序遍历的结果中,对上述形式中的所有左右括号进行定位。

这样以来,我们就知道了左子树的前序遍历和中序遍历结果,以及右子树的前序遍历和中序遍历结果,我们就可以递归地对构造出左子树和右子树,再将这两颗子树接到根节点的左右位置。

我们的做法是这样的

  • 我们对前序遍历结果进行下标利用下标 i 遍历,并放入到二叉树中

  • 在这里插入图片描述

  • 对中序遍历的元素设两个下标,一个记录最左边,一个记录最右边

  • 在这里插入图片描述

  • 对前序遍历里的每一个元素我们会在中序遍历里进行查找,找到后

  • 我们的inbegin与inend在左右子树里又会有新的指向

  • 在这里插入图片描述

  • 然后我们利用递归的思想,对所有元素进行遍历

  • 结束条件为inend < inbengin

  • 在这里插入图片描述

🐱‍🏍代码实现:

/*** 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 i = 0;public TreeNode buildTree(int[] preorder, int[] inorder) {return buildTreeChild(preorder,inorder,0,inorder.length-1);}public TreeNode buildTreeChild(int[] preorder, int[] inorder,int inbegin,int inend) {if(inbegin > inend) {return null;}TreeNode root = new TreeNode(preorder[i]);//找到当前根,在中序遍历的位置int rootIndex = findIndex(inorder,inbegin,inend,preorder[i]);i++;root.left = buildTreeChild(preorder,inorder,inbegin,rootIndex-1);root.right = buildTreeChild(preorder,inorder,rootIndex+1,inend);return root;}private int findIndex( int[] inorder,int inbegin,int inend, int key) {for(int i = inbegin;i <= inend; i++) {if(inorder[i] == key) {return i;}}return -1;}
}

🌲拓展——从中序与后序遍历序列构造二叉树

与从前序与中序遍历序列构造二叉树实现类似,这里不再做过多赘述

代码实现:

    class Solution2 {public int i = 0;public TreeNode buildTree(int[] inorder, int[] postorder) {i = postorder.length-1;return buildTreeChild(postorder,inorder,0,inorder.length-1);}public TreeNode buildTreeChild(int[] postorder, int[] inorder,int inbegin,int inend) {if(inbegin > inend) {return null;}TreeNode root = new TreeNode(postorder[i]);//找到当前根,在中序遍历的位置int rootIndex = findIndex(inorder,inbegin,inend,postorder[i]);i--;root.right = buildTreeChild(postorder,inorder,rootIndex+1,inend);root.left = buildTreeChild(postorder,inorder,inbegin,rootIndex-1);return root;}private int findIndex( int[] inorder,int inbegin,int inend, int key) {for(int i = inbegin;i <= inend; i++) {if(inorder[i] == key) {return i;}}return -1;}}

⭕总结

关于《【数据结构】 二叉树面试题讲解->贰》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

相关文章:

【数据结构】 二叉树面试题讲解->贰

文章目录 &#x1f30f;引言&#x1f384;[二叉树遍历](https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId60&&tqId29483&rp1&ru/activity/oj&qru/ta/tsing-kaoyan/question-ranking)&#x1f431;‍&#x1f464;题目描述&#…...

C和SystemVerilog联合仿真

想要联合仿真一个c程序和verilog表示的硬件&#xff0c;可以用如下方法&#xff08;DPI&#xff09;&#xff1a; 先写一个.c文件funcs.c #include <stdio.h> #include "svdpi.h"extern int sayHello();void something() {printf("something\n");s…...

15-mongodb

一、 MongoDB 简介 1 什么是 MongoDB MongoDB 是一个基于分布式文件存储的数据库。由 C语言编写。在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系…...

CSS学习笔记02

CSS笔记02 美化网页元素 为什么要美化网页 目的&#xff1a; 有效的传递页面信息美化网页、页面漂亮、才能吸引用户突显页面的主题提高用户的体验 span标签 span标签是短语内容的通用行内容器&#xff0c;它本身并没有任何特殊语义。 通常我们使用span标签来把我们想要重…...

为什么Java接口可以多继承,而类不可以?

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…...

自动化信息收集工具 水泽 使用教程

自动化信息收集工具 水泽 使用教程 1.水泽简介&安装2.使用教程3.测试使用1.水泽简介&安装 一条龙服务,只需要输入根域名即可全方位收集相关资产,并检测漏洞。也可以输入多个域名、C段IP等 开发语言:Python3 水泽下载地址 安装前置准备: 当前用户对该目录有写权…...

2023年全国职业院校技能大赛(高等职业教育组)“信息安全管理与评估”理论技能答案

理论技能与职业素养&#xff08;100分&#xff09; 2023年全国职业院校技能大赛&#xff08;高等职业教育组&#xff09; “信息安全管理与评估”理论技能 【注意事项】 1.理论测试前请仔细阅读测试系统使用说明文档&#xff0c;按提供的账号和密码登录测试系统进行测试&am…...

MATLAB 动态图GIF

MATLAB 动态图GIF 前言一、创建动态图&#xff08;动态曲线、动态曲面&#xff09;1. 创建动画曲线&#xff08;MATLAB animatedline函数&#xff09;2. 创建动画曲面 二. 保存动态图三、完整示例1. 动态曲线&#xff08; y s i n ( x ) ysin(x) ysin(x)&#xff09;2. 动态曲…...

ChatGPT⼊门到精通(4):ChatGPT 为何⽜逼

⼀、通⽤型AI 在我们原始的幻想⾥&#xff0c;AI是基于对海量数据的学习&#xff0c;锻炼出⼀个⽆所不知⽆所不能的模 型&#xff0c;并借助计算机的优势&#xff08;计算速度、并发可能&#xff09;等碾压⼈类。 但我们⽬前的AI&#xff0c;不管是AlphaGo还是图像识别算法&am…...

数据分析基础-数据可视化学习笔记03-可视化的符号与表示-图形符号学

概念 图型符号学&#xff08;Cartographic Symbolization&#xff09;是地图学领域中的一个重要概念&#xff0c;涉及到如何使用不同的符号、颜色、图案和标记来在地图上表示地理信息和数据。图型符号学旨在传达地理信息&#xff0c;使得地图能够清晰、有效地传达各种空间数据…...

暴力递归转动态规划(四)

题目 规定1对应A、2对应B、3对应C…26对应Z&#xff0c;那么一个数字字符串比如"111"&#xff0c;就可以转化为&#xff1a;“AAA”、“KA"或"AK”&#xff0c;给定一个数字字符组成的字符串str&#xff0c;返回有多少种转化结果。 解释一下&#xff0c;字…...

大数据项目实战(Sqoop安装)

一&#xff0c;搭建大数据集群环境 1.4 Sqoop安装 1.sqoop安装 &#xff08;1&#xff09;上传安装包 &#xff08;2&#xff09;解压安装包 tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /export/servers &#xff08;3&#xff09;重命名 mv sqoop-1.4.6.b…...

android——spinner下拉弹窗、popupwindow下拉弹窗列表

一、spinner下拉弹窗 效果图如下&#xff1a; adapter的代码&#xff1a; package com.yaona.spinnerimport android.R import android.content.Context import android.graphics.Color import android.view.LayoutInflater import android.view.View import android.view.Vie…...

【阿里淘天】淘天20230824真题一、二 <模拟、双指针>

一、 题目描述&#xff1a; 小红有一个01字符串&#xff0c;她可以进行最多k次提作&#xff0c;每次操作可以交换相邻的两个字符&#xff0c;问可以得到的字典序最小的字符串是什么 输入描述&#xff1a; 一行两个整数 n 和 k&#xff0c;表示字符串的长度和可以进行的操作…...

Java注解和反射

注解(Java.Annotation) 什么是注解&#xff08;Annotation&#xff09;&#xff1f; Annotation是从JDK5.0开始引入的新技术 Annotation的作用: 不是程序本身&#xff0c;可以对程序作出解释(这一点和注释(comment)没什么区别)可以被其他程序(比如:编译器等)读取Annotation的…...

【Docker】01-Centos安装、简单使用

参考教程&#xff1a; https://www.bilibili.com/video/BV1Qa4y1t7YH/?p5&spm_id_frompageDriver&vd_source4964ba5015a16eb57d0ac13401b0fe77 什么是Docker&#xff1f; Docker是一种开源的容器化平台&#xff0c;用于构建、打包、部署和运行应用程序。它通过使用容…...

k8s之存储篇---数据卷Volume

数据卷概述 Kubernetes Volume&#xff08;数据卷&#xff09;主要解决了如下两方面问题&#xff1a; 数据持久性&#xff1a;通常情况下&#xff0c;容器运行起来之后&#xff0c;写入到其文件系统的文件暂时性的。当容器崩溃后&#xff0c;kubelet 将会重启该容器&#xff…...

博流RISC-V芯片JTAG debug配置与运行

文章目录 1、Windows下安装与配置2、Linux下安装与配置3、芯片默认 JTAG PIN 列表4、命令行运行JTAG5、Eclipse下使用JTAG 1、Windows下安装与配置 CKLink 驱动安装 Windows版驱动下载地址&#xff1a; https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1666331…...

[国产MCU]-W801开发实例-UART控制器

UART控制器 文章目录 UART控制器1、UART控制器介绍2、UART驱动API介绍3、UART使用示例本文将详细如何使用W801的UART模块。 1、UART控制器介绍 UART是一种通用串行 数据总线 ,用于 异步通信 。该总线支持双向通信,可以实现 全双工传输 和接收。 W801 共 6组普通 UART口,通…...

OpenCV(九):LUT查找表

LUT&#xff08;Look-Up Table&#xff09;查找表是OpenCV中一种常用的图像处理方法&#xff0c;用于对图像进行像素级别的颜色映射或图像增强操作。LUT查找表可以实现快速、高效的颜色转换和像素操作&#xff0c;尤其在处理大量像素的情况下具有优势。以下是关于OpenCV LUT查找…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...