【C++】二叉樹相關算法題

一、根據二叉樹創建字符串

題目描述:
給你二叉樹的根節點 root ,請你采用前序遍歷的方式,將二叉樹轉化為一個由括號和整數組成的字符串,返回構造出的字符串。
空節點使用一對空括號對 “()” 表示,轉化后需要省略所有不影響字符串與原始二叉樹之間的一對一映射關系的空括號對。
題目示例:
在這里插入圖片描述

分析: 根據題意,我們可以觀察出一下規律:

  1. 根據題意,如果左子樹為空,右子樹不為空,就需要加空()
  2. 如果右子樹為空,就不需要加空()
  3. 左右子樹都為空,就不需要加空()
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:string str = "";string tree2str(TreeNode* root) {if (root == nullptr)return "";str += to_string(root->val);//根據題意,如果左子樹為空,右子樹不為空,就需要加空()//如果右子樹為空,就不需要加空()//左右子樹都為空,就不需要加空()if (root->left || root->right){str += '(';tree2str(root->left);str += ')';}if (root->right){str += '(';tree2str(root->right);str += ')';}return str;}
};

二、二叉樹的層序遍歷

題目描述:
給你二叉樹的根節點 root ,返回其節點值的 層序遍歷 。 (即逐層地,從左到右訪問所有節點)。
題目示例:
在這里插入圖片描述

分析:
通過層序遍歷二叉樹,我們可以通過隊列來實現,利用隊列先進先出的特點對二叉樹進行層序遍歷,控制每一層的節點的個數,來實現層序遍歷。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),* right(right) {}* };*/
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> vv;queue<TreeNode*> q;int levelsize = 0;if(root){levelsize = 1;q.push(root);}while(q.size()){vector<int> v;while(levelsize--){TreeNode* front = q.front();q.pop();v.push_back(front->val);if(front->left)q.push(front->left);if(front->right)q.push(front->right);}levelsize = q.size();vv.push_back(v);}return vv;}
};

三、二叉樹的層序遍歷 II

題目描述:
給你二叉樹的根節點 root ,返回其節點值 自底向上的層序遍歷 。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)
題目示例:
在這里插入圖片描述

分析:
思路和上面一樣,只需要將上面返回的vector數組逆轉就行

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> vv;queue<TreeNode*> q;int levelsize = 0;if(root){levelsize = 1;q.push(root);}while(q.size()){vector<int> v;while(levelsize--){TreeNode* front = q.front();q.pop();v.push_back(front->val);if(front->left)q.push(front->left);if(front->right)q.push(front->right);}levelsize = q.size();vv.push_back(v);}reverse(vv.begin(),vv.end());return vv;}
};

四、二叉樹的最近公共祖先

題目描述:
給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。
百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個節點 p、q,最近公共祖先表示為一個節點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節點也可以是它自己的祖先)。
題目示例:
在這里插入圖片描述

分析:

  1. 第一種思路(時間復雜度O(N^2)
    我們可以通過觀察規律,發現兩個節點要不分布在最近祖先的兩個不同的子樹中,要不分布在最近祖先的同一個子樹中(包含祖先),于是我們就可以遍歷樹中的每一個節點,如果祖先的左右子樹中是否有這兩個節點或如果祖先本身就是需要查找的節點,就只需要看左子樹或右子樹是否存在另一個節點,如果有,就證明其是最近的公共祖先。
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:bool IsIntree(TreeNode* root,TreeNode* p,TreeNode* q){if(root == nullptr)return false;if(root->val == p->val || root->val == q->val)return true;bool left = IsIntree(root->left,p,q);bool right = IsIntree(root->right,p,q);return left || right;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == nullptr)return nullptr;//p是自己的祖然后在查找q是否在左子樹或右子樹if(root->val == p->val && (IsIntree(root->left,p,q) || IsIntree(root->right,p,q))){return root;}//q是自己的祖然后在查找p是否在左子樹或右子樹else if(root->val == q->val && (IsIntree(root->left,p,q) || IsIntree(root->right,p,q))){return root;}//p,q在不在左子樹或右子樹中的任意一棵樹else if(IsIntree(root->left,p,q) && IsIntree(root->right,p,q)){return root;}//這個節點不是最近公共祖先else {TreeNode* Inright = lowestCommonAncestor(root->left,p,q);if(Inright)//不是nullptr就表示這個節點是最近公共祖先return Inright;TreeNode* Inleft = lowestCommonAncestor(root->right,p,q);if(Inleft)//不是nullptr就表示這個節點是最近公共祖先return Inleft;return nullptr;}}
};
  1. 第二種思路(時間復雜度O(N)
    通過前序遍歷左子樹和右子樹,找到對應的節點,并用棧存儲從根節點到對應節點的路勁,最后模擬兩個鏈表找交點的情況,長的棧先出棧,直到兩個棧的大小相等,在一起出棧,直到兩個出棧的節點值相等,就表示其是最近的公共祖先
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:bool GetPath(TreeNode* root,TreeNode* node,stack<TreeNode*>& Path){if(root == nullptr)return false;Path.push(root);if(root == node)return true;bool left = GetPath(root->left,node,Path);bool right = GetPath(root->right,node,Path);if(!right && !left)Path.pop();return left || right;//左子樹和右子樹都沒有找到}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {stack<TreeNode*> ppath,qpath;GetPath(root,p,ppath);GetPath(root,q,qpath);while(ppath.size() > qpath.size()){ppath.pop();}while(qpath.size() > ppath.size()){qpath.pop();}while(qpath.top() != ppath.top()){qpath.pop();ppath.pop();}return ppath.top();}
};

五、將二叉搜索樹轉化為排序的雙向鏈表

題目描述:
將一個 二叉搜索樹 就地轉化為一個 已排序的雙向循環鏈表 。
對于雙向循環列表,你可以將左右孩子指針作為雙向循環鏈表的前驅和后繼指針,第一個節點的前驅是最后一個節點,最后一個節點的后繼是第一個節點。
特別地,我們希望可以 就地 完成轉換操作。當轉化完成以后,樹中節點的左指針需要指向前驅,樹中節點的右指針需要指向后繼。還需要返回鏈表中最小元素的指針。
題目示例:
在這里插入圖片描述

分析:
由題目給出條件,可知該二叉樹是二叉搜索樹,這題需要我們把二叉搜索樹轉換為 升序排列 的鏈表,我們知道二叉搜索樹的升序遍歷是 中序遍歷 ,于是我們就可以定義兩個指針 curprevcur 指向當前節點, prev 指向當前節點的上一個節點,通過 中序遍歷 樹的每一個節點,當當前節點 cur 的左子樹遍歷完,cur->left = prev ,通過改變前驅和后繼的指針的指向,來把其鏈接已排序的雙向循環鏈表.

/*
// Definition for a Node.
class Node {
public:int val;Node* left;Node* right;Node() {}Node(int _val) {val = _val;left = NULL;right = NULL;}Node(int _val, Node* _left, Node* _right) {val = _val;left = _left;right = _right;}
};
*/
class Solution {
public:void Link(Node* cur,Node*& prev){if(cur == nullptr)return;Link(cur->left,prev);cur->left = prev;if(prev)prev->right = cur;prev = cur;Link(cur->right,prev);}Node* treeToDoublyList(Node* root) {if(root == nullptr)return nullptr;Node* cur = root;Node* prev = nullptr;Link(cur,prev);Node* tail = prev;while(root->left){root = root->left;}Node* head = root;head->left = tail;tail->right = head;return head;}
};

六、從前序與中序遍歷序列構造二叉樹

題目描述:
給定兩個整數數組 preorder 和 inorder ,其中 preorder 是二叉樹的先序遍歷,inorder 是同一棵樹的中序遍歷,請構造二叉樹并返回其根節點
題目示例:
在這里插入圖片描述

分析: 根據前序就可以確定根節點,根據中序就可以確定根節點的左右子樹,用區間來表示根節點的左右子樹區間,最后就可以確定出整個二叉樹。
在這里插入圖片描述

class Solution {
public://pre_begin,pre_endTreeNode* buildTree_with_pre_in(vector<int>& preorder, vector<int>& inorder,int& pospre,int in_begin,int in_end){if(in_begin > in_end){return nullptr;}//if(pospre <= inorder.size() - 1)TreeNode* newnode = new TreeNode(preorder[pospre++]);int pos;for(int i = in_begin;i <= in_end;i++){if(inorder[i] == newnode->val){pos = i;break;}}if(pospre > inorder.size() - 1)pospre = inorder.size() - 1;TreeNode* left = buildTree_with_pre_in(preorder,inorder,pospre,in_begin,pos - 1);// 左子樹if(pospre > inorder.size() - 1)pospre = inorder.size() - 1;TreeNode* right = buildTree_with_pre_in(preorder,inorder,pospre,pos + 1,in_end);// 右子樹newnode->left = left;newnode->right = right;return newnode;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int i = 0;TreeNode* root = buildTree_with_pre_in(preorder,inorder,i,0,inorder.size() - 1);return root;}
};

七、從中序與后序遍歷序列構造二叉樹

題目描述:
給定兩個整數數組 inorder 和 postorder ,其中 inorder 是二叉樹的中序遍歷,postorder 是同一棵樹的后序遍歷,請你構造并返回這顆 二叉樹 。
題目示例:
在這里插入圖片描述

分析: 與上面的題目類似,只不過是后序遍歷,根據后序遍歷的特點:左子樹-右子樹-根節點的特點,我們可以發現把后序反過來,就可以確定根節點的位置,然后再根據中序判斷右子樹和左子樹的位置,其實就是一個 根-右子樹-左子樹 的過程來創建樹,而前序創建樹的就是 根-左子樹-右子樹 ,和前序相比就是遍歷子樹的順序變了而已。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* buildTree_with_in_post(vector<int>& inorder,vector<int>& postorder,int& pospost,int in_begin,int in_end){if(in_begin > in_end)return nullptr;TreeNode* newnode = new TreeNode(postorder[pospost--]);int pos = -1;for(int i = in_begin;i <= in_end;i++){if(inorder[i] == newnode->val){pos = i;break;}}TreeNode* right = buildTree_with_in_post(inorder,postorder,pospost,pos + 1,in_end);TreeNode* left = buildTree_with_in_post(inorder,postorder,pospost,in_begin,pos - 1);newnode->left = left;newnode->right = right;return newnode;}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {int i = postorder.size() - 1;//從后序的最后一個節點開始TreeNode* root = buildTree_with_in_post(inorder,postorder,i,0,postorder.size() - 1);return root;}
};

八、非遞歸實現二叉樹的前序遍歷

題目描述: 給你二叉樹的根節點 root ,返回它節點值的 前序 遍歷。
題目示例:
在這里插入圖片描述

分析: 要迭代?遞歸實現?叉樹前序遍歷,?先還是要借助遞歸的類似的思想,只是需要把結點存在棧中,?便類似遞歸回退時取父路徑結點。跟這?不同的是,這?把?棵?叉樹分為兩個部分:

  1. 先訪問左路結點
  2. 再訪問左路結點的右?樹
    這?訪問右?樹要以循環從棧依次取出這些結點,循環?問題的思想訪問左路結點的右?樹。前序遍歷的順序為 根-左子樹-右子樹 ,我們每次訪問一個節點,后需要把它入棧,就可以實現前序遍歷。
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {vector<int> v;if(root == nullptr)return v;stack<TreeNode*> st;st.push(root);v.emplace_back(root->val);while(root->left){root = root->left;v.emplace_back(root->val);st.push(root);}while(st.size()){TreeNode* cur = st.top();st.pop();cur = cur->right;if(cur){st.push(cur);v.emplace_back(cur->val);}while(cur && cur->left){cur = cur->left;v.emplace_back(cur->val);st.push(cur);}}return v;}
};

九、非遞歸實現二叉樹的中序遍歷

題目描述: 給定一個二叉樹的根節點 root ,返回 它的 中序 遍歷 。
題目示例:
在這里插入圖片描述

分析:
中序訪問的順序是 左子樹-根-右子樹 ,每當訪問玩左子樹的時候,就將棧頂數據入棧,即可實現中序遍歷二叉樹

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> v;if(root == nullptr)return v;stack<TreeNode*> st;st.push(root);while(root->left){root = root->left;st.push(root);}while(st.size()){TreeNode* cur = st.top();v.emplace_back(cur->val); st.pop();cur = cur->right;if(cur){st.push(cur);}while(cur && cur->left){cur = cur->left;st.push(cur);}}return v;}
};

十、非遞歸實現二叉樹的后序遍歷

題目描述: 給你一棵二叉樹的根節點 root ,返回其節點值的 后序遍歷 。
題目示例:
在這里插入圖片描述

分析::
后序遍歷的需要先訪問順序為 左子樹-右子樹-根 , 首先我們先把根節點 root 左子樹的節點全部加入棧,我們想要訪問根,就必須先把根的左子樹和右子樹都訪問完,于是我們就需要用 prev 來表示它當前節點的前一個節點,如果 cur->right == nullptr || cur->right == prev 就表示當前根節點的左子樹和右子樹都訪問完了,然后再出棧,并且不需要向下訪問了。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {vector<int> v;if(root == nullptr)return v;stack<TreeNode*> st;st.push(root);TreeNode* prev = nullptr;while(root->left){root = root->left;st.push(root);}while(st.size()){TreeNode* cur = st.top();if(cur->right == nullptr || cur->right == prev){st.pop();v.emplace_back(cur->val);prev = cur;continue;}cur = cur->right;if(cur){st.push(cur);}while(cur && cur->left){cur = cur->left;st.push(cur);}}return v;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/web/71474.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71474.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71474.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機械視覺】C#+visionPro聯合編程———【一、C# + VisionPro 聯合編程詳解以及如何將visionPro工具加載到winform】

機械視覺與 C# VisionPro 聯合編程詳解 目錄 機械視覺與 C# VisionPro 聯合編程詳解 概念 應用場景 1. 工業檢測與質量控制缺陷檢測 2. 定位與機器人引導 3. 識別與分類 4. 復雜流程控制 將visionPro工具加載到winform 環境準備 一、創建winform項目 二、打開窗體…

修改hosts文件,修改安全屬性,建立自己的DNS

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C的&#xff0c;可以在任何平臺上使用。 源碼指引&#xff1a;github源…

對NXP提供的BSP里邊所使用的u-boot的環境變量`bootcmd`的解析

為什么我們要解析環境變量bootcmd&#xff1f; 承接博文 https://blog.csdn.net/wenhao_ir/article/details/145902134 繼續解析u-boot的環境變量bootcmd。 為什么要解析u-boot的這個環境變量bootcmd&#xff1f;因為如果u-boot在倒計時完后,首先執行的是就是下面這條命令&am…

NSSCTF [SWPUCTF 2024 秋季新生賽]金絲雀

5948.[SWPUCTF 2024 秋季新生賽]金絲雀 canary繞過和64位的ret2libc(格式化字符串泄露) (1) motalymotaly-VMware-Virtual-Platform:~/桌面$ file xn xn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.…

神經網絡中梯度計算求和公式求導問題

以下是公式一推導出公式二的過程。 表達式一 ? E ? w j k ? 2 ( t k ? o k ) ? sigmoid ( ∑ j w j k ? o j ) ? ( 1 ? sigmoid ( ∑ j w j k ? o j ) ) ? ? ? w j k ( ∑ j w j k ? o j ) \frac{\partial E}{\partial w_{jk}} -2(t_k - o_k) \cdot \text{sigm…

koa-session設置Cookie后獲取不到

在谷歌瀏覽器中請求獲取不到cookie問題之一&#xff08;谷歌安全策略&#xff09; 場景 前端使用 axios 請求&#xff0c;項目地址&#xff1a;http://192.168.8.1:5173 import axios from axiosconst request axios.create({baseURL: http://127.0.0.1:3001/,timeout: 60000,…

單元測試與仿真程序之間的選擇

為什么寫這篇文章 現在的工作需求&#xff0c;讓我有必要總結和整理一下。 凡事都有適用的場景。首先這里我需要提示一下&#xff0c;這里的信息&#xff0c;可能并不普適。 但是可以肯定一點的是&#xff0c;有些人&#xff0c;不論做事還是寫書&#xff0c;上下文還沒有交待…

如何在Android中實現圖片加載和緩存

在Android中實現圖片加載和緩存是提升應用性能和用戶體驗的關鍵環節。高效的圖片加載和緩存策略能夠減少內存占用、避免應用卡頓&#xff0c;并快速響應用戶的圖片查看需求。以下是在Android中實現圖片加載和緩存的幾種常見方法&#xff1a; 一、使用第三方圖片加載庫 1. Gli…

FusionInsight MRS云原生數據湖

FusionInsight MRS云原生數據湖 1、FusionInsight MRS概述2、FusionInsight MRS解決方案3、FusionInsight MRS優勢4、FusionInsight MRS功能 1、FusionInsight MRS概述 1.1、數據湖概述 數據湖是一個集中式存儲庫&#xff0c;允許以任意規模存儲所有結構化和非結構化數據。可以…

推薦幾款優秀的PDF轉電子畫冊的軟件

當然可以&#xff01;以下是幾款優秀的PDF轉電子畫冊的軟件推薦&#xff0c;內容簡潔易懂&#xff0c;這些軟件都具有易用性和互動性&#xff0c;適合不同需求的用戶使用。? ? FLBOOK&#xff5c;在線創作平臺 支持PDF直接導入生成仿真翻頁電子書。提供15主題模板與字體庫&a…

【GoTeams】-2:項目基礎搭建(下)

本文目錄 1. 回顧2. Zap日志3. 配置4. 引入gprc梳理gRPC思路優雅關閉gRPC 1. 回顧 上篇文章我們進行了路由搭建&#xff0c;引入了redis&#xff0c;現在來看看對應的效果。 首先先把前端跑起來&#xff0c;然后點擊注冊獲取驗證碼。 再看看控制臺輸出和redis是否已經有記錄&…

深度學習反向傳播

一、白話解釋 梯度其實就是導數&#xff0c;除了用符號求導也可以用近似求導&#xff1a; 然后更新ww-學習率*導數 反向傳播就是鏈式求導 向前計算&#xff1a;對每個節點求偏導 在前向傳播的時候&#xff0c;進行一次前向計算的時候就可以把每一條線的偏導數都知道 前向傳…

JavaWeb-HttpServletRequest請求域接口

文章目錄 HttpServletRequest請求域接口HttpServletRequest請求域接口簡介關于請求域和應用域的區別 請求域接口中的相關方法獲取前端請求參數(getParameter系列方法)存儲請求域名參數(Attribute系列方法)獲取客戶端的相關地址信息獲取項目的根路徑 關于轉發和重定向的細致剖析…

deepseek在pycharm 中的配置和簡單應用

對于最常用的調試python腳本開發環境pycharm&#xff0c;如何接入deepseek是我們窺探ai代碼編寫的第一步&#xff0c;熟悉起來總沒壞處。 1、官網安裝pycharm社區版&#xff08;免費&#xff09;&#xff0c;如果需要安裝專業版&#xff0c;需要另外找破解碼。 2、安裝Ollama…

AAA協議:從零認識網絡的“身份管家”

AAA&#xff08;Authentication, Authorization, Accounting&#xff0c;認證、授權和計費&#xff09;是網絡世界的“身份管理員”&#xff0c;負責確認“你是誰”、決定“你能干啥”、記錄“你干了啥”。如果你用過華三的交換機或路由器&#xff0c;可能在配置用戶管理時見過…

動態規劃01背包問題系列一>最后一塊石頭的重量II

這里寫目錄標題 題目分析&#xff1a;狀態表示&#xff1a;狀態轉移方程&#xff1a;初始化&#xff1a;填表順序&#xff1a;返回值&#xff1a;代碼呈現&#xff1a;優化版本&#xff1a;代碼呈現&#xff1a; 題目分析&#xff1a; 狀態表示&#xff1a; 狀態轉移方程&#…

逐行拆解 C 語言:數據類型、變量

今日&#xff0c;我們即將踏上一段充滿趣味與挑戰的學習之旅&#xff0c;深度鉆研數據類型的多樣奧秘&#xff0c;解鎖變量創建的實用技巧。不僅如此&#xff0c;還會邂逅兩個實用的基礎庫函數&#xff0c;探索它們在程序中穿針引線的奇妙作用。同時&#xff0c;幾個簡潔卻強大…

【音視頻】ffplay簡單過濾器

一、ffplay簡單過濾器 視頻旋轉&#xff1a;借助transpose濾鏡 ffplay -i 1.mp4 -vf transpose1這里選擇不同的數字是不同的方向&#xff1a; 視頻翻轉&#xff1a;借助hflip/vflip實現水平和垂直翻轉&#xff1a; 水平翻轉 ffplay 1.mp4 -vf hflip垂直翻轉 ffplay 1.mp4 …

springboot中注解有什么用

注解&#xff08;Annotation&#xff09;是 Java 的一個重要特性&#xff0c;我用幾個具體例子來解釋&#xff1a; 1、標記功能 Service // 告訴Spring這是一個服務類 public class UserService { }Data // 告訴Lombok自動生成getter/setter public class User {private…

Excel中COUNTIF用法解析

COUNTIF 是 Excel 中一個非常實用的函數&#xff0c;用于統計滿足某個條件的單元格數量。它的基本語法如下&#xff1a; 基本語法 COUNTIF(范圍, 條件) 范圍&#xff1a;需要統計的單元格區域&#xff0c;例如 A1:A10 或整列 A:A。 條件&#xff1a;用于判斷哪些單元格需要被…