C++ 二叉樹代碼

二叉樹代碼,見下

#include <iostream>
using namespace std;template<typename T>
struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL)TreeNode(T x):val(x), left(NULL), right(NULL){}
};template<typename T>
class Tree(){
private:TreeNode<T> *nodes;TreeNode<T> *root;size_t nodeSize;TreeNode<T> *Create(T a[], int size, int nodeId, T nullNode);void visit(TreeNode<T> *node);void preOrder(TreeNode<T> *node);void inOrder(TreeNode<T> *node);void postOrder(TreeNode<T> *node);void levelOrder(TreeNode<T> *node);
public:Tree();Tree(int maxNodes);~Tree();TreeNode<T>* GetTreeNode(int id);void CreateTree(T a[], int size, T nullNode);void preOrderTraversal();void inOrderTraversal();void postOrderTraversal();	
};template<typename T>
Tree<T>::Tree(){nodeSize = 100001;nodes = new TreeNode<T>[nodeSize]
}template<typename T>
Tree<T>::Tree(int maxNodes){nodeSize = maxNodes;nodes = new TreeNode<T>[nodeSize];
}template<typename T>
TreeNode<T>* Tree<T>::GetTreeNode(int id){return &nodes[id];
}template<typename T>
void Tree<T>::visit(TreeNode<T> *node){cout << node->val;
}template<typename T>
void Tree<T>::preOrder(TreeNode<T> *node){if(node){visit(node);preOrder(node->left);preOrder(node->right);}
}template<typename T>
void Tree<T>::inOrder(TreeNode<T> *node){if(node){inOrder(node->left);visit(node);inOrder(node->right);}
}template<typename T>
void Tree<T>::postOrder(TreeNode<T> *node){if(node){postOrder(node->left);postOrder(node->right);visit(node);}
}template<typename T>
void Tree<T>::CreatTree(T a[], int size, T nullnode){root = Create(a, size, 1, nullnode);
}template<typename T>
TreeNode<T>* Tree<T>::Create(T a[], int size, int nodeId, T nullnode){if(nodeId >= size || a[nodeId] == nullnode){return NULL;}TreeNode<T> *nowNode = GetTreeNode(nodeId);nowNode->val = a[nodeId];nowNode->left = Create(a, size, nodeId*2, nullnode);nowNode->right = Create(a, size, nodeId*2+1, nullnode);return nownode;	
}template<typename T>
void Tree<T>::preOrderTraversal(){preOrder(root);
}template<typename T>
void Tree<T>::inOrderTraversal(){inOrder(root);
}template<typename T>
void Tree<T>::postOrderTraversal(){postOrder(root);
}
int main()
{cout << "Hello World";return 0;
}

二叉樹代碼,對應力扣,完全二叉樹的節點個數

/*** 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:int countNodes(TreeNode* root) {if(root == NULL){return 0;}int lc = countNodes(root->left);int rc = countNodes(root->right);return lc + rc + 1;}
};

代碼練習,對應力扣單值二叉樹,代碼見下

/*** 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:bool isUnivalTree(TreeNode* root) {if(root == NULL){return true;}if(root->left){if(root->val != root->left->val){return false;}if(!isUnivalTree(root->left)){return false;}}if(root->right){if(root->val != root->right->val){return false;}if(!isUnivalTree(root->right)){return false;}}return true;}
};

代碼四,對應力扣 二叉樹的前序遍歷,代碼見下

/*** 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> ret;void preorder(TreeNode *root){if(root){ret.push_back(root->val);preorder(root->left);preorder(root->right);}}vector<int> preorderTraversal(TreeNode* root) {ret.clear();preorder(root);return ret;}
};

代碼五,對應力扣,二叉樹的中序遍歷,代碼見下

/*** 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> ret;void inorder(TreeNode *root){if(root){inorder(root->left);ret.push_back(root->val);inorder(root->right);}}vector<int> inorderTraversal(TreeNode* root) {ret.clear();inorder(root);return ret;}
};

代碼六,對應力扣,二叉樹的后續遍歷

/*** 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 {vector<int> ret;void postorder(TreeNode *root){if(root){postorder(root->left);postorder(root->right);ret.push_back(root->val);}}
public:vector<int> postorderTraversal(TreeNode* root) {ret.clear();postorder(root);return ret;}
};

代碼,對應力扣,翻轉二叉樹,代碼見下

/*** 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* invertTree(TreeNode* root) {if(root == NULL){return NULL;}TreeNode* l = invertTree(root->left);TreeNode* r = invertTree(root->right);root->left = r;root->right = l;return root;}
};

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

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

相關文章

leetcode第17題求電話號碼組合

原題出于leetcode第17題https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/題目如下&#xff1a; 題目稍微有點復雜&#xff0c;初看會感覺特別復雜&#xff0c;首先我們需要理清思路&#xff1a; 最后的結果是字母組合&#xff0c;因此遍歷的是…

Deepseek對ChatGPT的沖擊?

從測試工程師的視角來看&#xff0c;DeepSeek對ChatGPT的沖擊主要體現在**測試場景的垂直化需求與通用模型局限性之間的博弈**。以下從技術適配性、效率優化、風險控制及未來趨勢四個維度展開分析&#xff1a; --- ### **一、技術適配性&#xff1a;垂直領域能力決定工具選擇…

三十五周學習周報

目錄 摘要abstract文獻閱讀1.1相關知識1.1.1 PSO1.1.2 BI-LSTM1.1.3 BI-GRU 1.2 整體框架1.3 實驗分析 總結 摘要 在本周閱讀的文獻中&#xff0c;作者提出了一種創新的水文時間序列預測模型&#xff0c;其通過將粒子群優化&#xff08;PSO&#xff09;與Bi-LSTM和Bi-GRU相結合…

Git:多人協作

目錄 多人協作一 準備工作 開發者1準備工作 開發者2準備工作 協作開發 將內容合并進master 多人協作二 開發者1進行工作 開發者2進行工作 特殊場景 將內容合并進master 之前所學習的Git操作&#xff0c;是為了多人協作開發做鋪墊的&#xff0c;因為在公司中&#xf…

登錄次數限制

文章目錄 一、應用場景與設計目的1. 應用場景2. 設計目的 二、功能設計1. 登錄限制規則2. 解鎖機制3. 適用維度 三、技術實現1. 數據存儲2. 邏輯流程3. 實現代碼示例4. 動態鎖定時間 四、安全增強與擴展1. 防止用戶名枚舉2. 加入驗證碼3. 監控與報警4. 分布式支持 五、設計思考…

計算機畢業設計SpringBoot+Vue.js景區民宿預約系統(源碼+文檔+PPT+講解)

溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 作者簡介&#xff1a;Java領…

(十 五)趣學設計模式 之 命令模式!

目錄 一、 啥是命令模式&#xff1f;二、 為什么要用命令模式&#xff1f;三、 策略模式的實現方式四、 命令模式的優缺點五、 命令模式的應用場景六、 總結 &#x1f31f;我的其他文章也講解的比較有趣&#x1f601;&#xff0c;如果喜歡博主的講解方式&#xff0c;可以多多支…

Matlab 大量接單

分享一個matlab接私活、兼職的平臺 1、技術方向滿足任一即可 2、技術要求 3、最后 技術方向滿足即可 MATLAB&#xff1a;熟練掌握MATLAB編程語言&#xff0c;能夠使用MATLAB進行數據處理、機器學習和深度學習等相關工作。 機器學習、深度學習、強化學習、仿真、復現、算法、…

【自學筆記】大數據基礎知識點總覽-持續更新

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 大數據基礎知識點總覽1. 大數據概述2. 大數據處理技術3. 數據倉庫與數據挖掘4. 大數據分析與可視化5. 大數據平臺與架構6. 大數據安全與隱私 總結 大數據基礎知識點…

17、什么是智能指針,C++有哪幾種智能指針【高頻】

智能指針其實不是指針&#xff0c;而是一個&#xff08;模板&#xff09;類&#xff0c;用來存儲指向某塊資源的指針&#xff0c;并自動釋放這塊資源&#xff0c;從而解決內存泄漏問題。主要有以下四種&#xff1a; auto_ptr 它的思想就是當當一個指針對象賦值給另一個指針對…

CAN總線通信協議學習2——數據鏈路層之幀格式

1 幀格式 幀格式可理解為定義了傳輸的數據&#xff08;叫報文&#xff09;應該“長什么樣”來傳輸&#xff0c;也為后續設定一些規則如錯誤檢查機制提供了思路。 首先&#xff0c;幀格式可分為以下5種類型&#xff1a; PS&#xff1a;CAN總線任意一個設備可當收也可當發&#…

MATLAB中asManyOfPattern函數用法

目錄 語法 說明 示例 匹配盡可能多的模式實例 指定要匹配的最小模式數 指定要匹配的最小和最大模式數 asManyOfPattern函數的功能是模式匹配次數盡可能多。 語法 newpat asManyOfPattern(pat) newpat asManyOfPattern(pat,minPattern) newpat asManyOfPattern(pat,m…

1×1卷積的作用與原理詳解

11卷積的作用與原理詳解 文章目錄 11卷積的作用與原理詳解引言1. 什么是11卷積&#xff1f;2. 11卷積的數學表達3. 11卷積的主要作用3.1 改變通道數&#xff08;升維/降維&#xff09;3.1.1 降維&#xff08;Dimension Reduction&#xff09;3.1.2 升維&#xff08;Dimension I…

網絡配置的基本信息

目錄 一、網絡接口信息 1、關閉虛擬化服務 2、配置臨時IP 3、配置靜態IP 4、常見網絡命令 5、安裝Wireshark 一、網絡接口信息 輸入 ip address&#xff0c;會出現下面的內容 網卡名稱及其含義&#xff1a; 網卡名稱說明lo 表示本地回環地址。 ens32 有線網卡&#xff0c…

dify綁定飛書多維表格

dify 綁定飛書和綁定 notion 有差不多的過程&#xff0c;都需要套一層應用的殼子&#xff0c;而沒有直接可以訪問飛書文檔的 API。本文記錄如何在dify工具中使用新增多條記錄工具。 創建飛書應用 在飛書開放平臺創建一個應用&#xff0c;個人用戶創建企業自建應用。 自定義應…

深入解析Crawl4AI:為AI應用量身定制的高效開源爬蟲框架

引言 在當今數據驅動的時代&#xff0c;人工智能&#xff08;AI&#xff09;和大型語言模型&#xff08;LLM&#xff09;的發展對高質量數據的需求日益增長。如何高效地從互聯網上獲取、處理和提取有價值的數據&#xff0c;成為了研究人員和開發者面臨的關鍵挑戰。Crawl4AI作為…

nginx 動態計算攔截非法訪問ip

需求&#xff1a;在Nginx上實現一個動態攔截IP的方法&#xff0c;具體是當某個IP在1分鐘內訪問超過60次時&#xff0c;將其加入Redis并攔截&#xff0c;攔截時間默認1天。 技術選型&#xff1a;使用NginxLuaRedis的方法。這種方案通過Lua腳本在Nginx處理請求時檢查Redis中的黑…

【軟件測試】論壇系統功能測試報告

文章目錄 1.前言2.項目介紹3. 對項目進行測試3.1 設計測試用例3.2 執行測試用例 1.前言 這次測試是我學習階段的練習&#xff0c;由于缺少需求規格說明等文檔&#xff0c;需要我盡可能發散思維去設計更多的測試用例。但無論如何測試至關重要&#xff0c;以下是核心原因&#x…

MyBatis TypeHandler 詳解與實戰:FastJson 實現字符串轉 List

在 MyBatis 中&#xff0c;TypeHandler 是實現 Java 類型與數據庫類型雙向轉換 的核心組件。無論是處理基礎數據類型還是復雜的 JSON、枚舉或自定義對象&#xff0c;它都能通過靈活的擴展機制滿足開發需求。本文將通過一個 將數據庫 JSON 字符串轉換為 List<User> 的案例…

《HelloGitHub》第 107 期

興趣是最好的老師&#xff0c;HelloGitHub 讓你對編程感興趣&#xff01; 簡介 HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。 github.com/521xueweihan/HelloGitHub 這里有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等&#xff0c;涵蓋多種編程語言 Python、…