數據結構 -- 樹

一、樹的基本概念

(一)定義

樹是由?n(n ≥ 0)?個結點組成的有限集合,是一種非線性層次結構:

  • 當?n = 0?時,稱為空樹
  • 當?n > 0?時,存在唯一的根結點(無前驅結點),其余結點可劃分為?m(m ≥ 0)?個互不相交的有限子集,每個子集都是一棵獨立的子樹

(二)結點與樹的核心屬性

概念定義
結點的度結點擁有的子樹個數
葉結點(終端結點)度為 0 的結點(無子樹,位于樹的最底層)
分支結點(非終端結點)度不為 0 的結點(至少擁有一棵子樹)
樹的度樹中所有結點的最大度數
深度 / 高度從根結點開始計數,根為第 1 層,子結點依次遞增,樹的最大層數即為深度 / 高度

(三)存儲結構

  • 順序存儲:通過數組存儲結點,需結合結點間的層次關系(如雙親下標)關聯數據,適用于結構規則的樹(如完全二叉樹)。
  • 鏈式存儲:通過指針記錄結點的子樹地址(如孩子指針、兄弟指針),靈活性高,適用于各類形態的樹。

二、二叉樹的基本概念

(一)定義

二叉樹是?n(n ≥ 0)?個結點的有限集合,滿足:

  • 當?n = 0?時,為空二叉樹;
  • 當?n > 0?時,由根結點左子樹右子樹組成,且左、右子樹互不相交,均為二叉樹。

(二)核心特點

  1. 每個結點最多有 2 棵子樹(左子樹和右子樹),即二叉樹的度最大為 2;
  2. 左、右子樹具有有序性,不可隨意顛倒(如 “僅有左子樹” 與 “僅有右子樹” 是兩種不同結構);
  3. 若結點僅有一棵子樹,必須明確標注是左子樹還是右子樹。

三、特殊二叉樹

類型定義
斜樹所有結點僅含一棵子樹,分為左斜樹(僅左子樹)和右斜樹(僅右子樹)
滿二叉樹深度為?k(k ≥ 1),所有分支結點均有左、右子樹,且所有葉子結點在同一層
完全二叉樹深度為?k(k ≥ 1),按層序編號后,與同深度滿二叉樹的結點編號完全一致

四、二叉樹重要性質

  1. 第?i?層結點數上限:第?i(i ≥ 1)?層最多有?2^{i-1}?個結點(如第 3 層最多 4 個結點);
  2. 深度為?k?的結點總數上限:深度為?k(k ≥ 1)?的二叉樹,最多有?2^k - 1?個結點(此時為滿二叉樹);
  3. 葉子結點與度為 2 的結點關系:任意非空二叉樹中,葉子結點數?n??= 度為 2 的結點數?n??+ 1(即?n? = n? + 1);
  4. 完全二叉樹深度計算:含?n?個結點的完全二叉樹,深度為??log?n? + 1?x??表示向下取整)。

五、二叉樹遍歷方式

二叉樹遍歷是按規則訪問所有結點(每個結點僅訪問一次),核心分為深度優先遍歷(DFS)和廣度優先遍歷(BFS):

遍歷類型具體方式遍歷順序
深度優先遍歷前序遍歷根結點 → 左子樹 → 右子樹
中序遍歷左子樹 → 根結點 → 右子樹
后序遍歷左子樹 → 右子樹 → 根結點
廣度優先遍歷層序遍歷按層次從上到下、同層從左到右

前序遍歷
規則是若二叉樹為空,則空操作返回,否則先訪問根結點,然后前序遍歷左子
樹,再前序遍歷右子樹。如圖,遍歷的順序為:ABDGHCEIF。

void PreOrder(TreeNode* root) {if (root == NULL) return;  // 空樹,遞歸終止printf("%d ", root->data); // 訪問根結點PreOrder(root->left);      // 遞歸遍歷左子樹PreOrder(root->right);     // 遞歸遍歷右子樹
}

中序遍歷
規則是若樹為空,則空操作返回,否則從根結點開始(注意并不是先訪問根結
點),中序遍歷根結點的左子樹,然后是訪問根結點,最后中序遍歷右子樹。如圖,遍歷的順序為:GDHBAEICF。

void InOrder(TreeNode* root) {if (root == NULL) return;  // 空樹,遞歸終止InOrder(root->left);       // 遞歸遍歷左子樹printf("%d ", root->data); // 訪問根結點InOrder(root->right);      // 遞歸遍歷右子樹
}

3.后序遍歷
規則是若樹為空,則空操作返回,否則從左到右先葉子后結點的方式遍歷訪問左
右子樹,最后是訪問根結點。如圖,遍歷的順序為:GHDBIEFCA。

void PostOrder(TreeNode* root) {if (root == NULL) return;  // 空樹,遞歸終止PostOrder(root->left);     // 遞歸遍歷左子樹PostOrder(root->right);    // 遞歸遍歷右子樹printf("%d ", root->data); // 訪問根結點
}

遍歷順序:按樹的層次從上到下、同一層從左到右依次訪問所有結點,本質是 “按層訪問”。?實現依賴:需借助隊列(先進先出,FIFO),通過 “根結點入隊 → 隊頭出隊訪問 → 左右子結點入隊 → 循環至隊空” 的邏輯實現。

void LevelOrder(TreeNode* root) {if (root == NULL) return;          // 空樹,直接返回SeqQue* queue = CreateSeqQue(100); // 創建容量為 100 的隊列EnterSeqQue(queue, root);          // 根結點入隊while (!IsEmptySeqQue(queue)) {    // 隊列非空,循環處理TreeNode* curr = GetHeadSeqQue(queue); // 取隊頭結點printf("%d ", curr->data);     // 訪問當前結點QuitSeqQue(queue);             // 隊頭結點出隊if (curr->left != NULL)        // 左子結點非空,入隊EnterSeqQue(queue, curr->left);if (curr->right != NULL)       // 右子結點非空,入隊EnterSeqQue(queue, curr->right);}DestroySeqQue(queue);              // 銷毀隊列,釋放內存
}

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

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

相關文章

單片機---------WIFI模塊

1.ESP-12F模組基礎知識ESP12-F模組(安信可(Ai-Thinker)ESP8266系列模組)是一款基于樂鑫(Espressif)公司ESP8266芯片的Wi-Fi無線通信模塊,廣泛應用于物聯網(IoT)領域。它體…

迅為RK3562開發板Android修改uboot logo

本文檔配套資料在網盤資料“iTOP-3562 開發板\02_【iTOP-RK3562 開發板】開發資料\07_Android 系統開發配套資料\05_Android 修改 uboot logo 配套資料”路徑下。1 準備 logo系統默認 uboot logo,如下圖所示:我們如果想要替換這個 logo,首先要制作一個新…

反催收APP開發思路:用Flutter打造證據鏈管理工具

針對非法催收問題,熊哥分享了一款反催收APP的開發思路,旨在幫助“誠而不幸”的負債人收集騷擾證據,通過Flutter實現跨平臺部署。本文整理其核心功能與技術方案,助力開發者快速上手!一、核心功能:證據收集與…

市政道路井蓋缺失識別誤報率↓82%!陌訊多模態融合算法實戰優化與邊緣部署

原創聲明本文為原創技術解析文章,核心技術參數、架構設計及實戰數據引用自 “陌訊技術白皮書”,文中算法實現與優化方案均基于實測驗證,禁止未經授權轉載或篡改內容。一、行業痛點:市政井蓋識別的 “三大攔路虎”市政道路井蓋作為…

navicat及SQLyog的下載和安裝

navicat安裝和使用navicat下載和安裝navicat 下載navicat 的安裝SQLyog下載和安裝SQLyog 的下載SQLyog 的安裝連接到MySQL數據庫navicat下載和安裝 navicat 下載 navicat下載地址 這兩個都是滿足我們需求的,均可 這樣我們就得到了一個雙擊可執行的exe文件 navic…

在TencentOS3上部署OpenTenBase:從入門到實戰的完整指南

文章目錄前言初識OpenTenBase:不只是又一個分布式數據庫OpenTenBase的核心特性環境準備系統環境檢查安裝必要的依賴包用戶環境配置:安全第一創建專用用戶配置SSH免密登錄(單機部署也需要)源碼編譯:從零開始構建獲取源碼…

flink常見問題之超出文件描述符限制

引言Apache Flink 是一個強大且流行的流處理框架,它支持高吞吐量和低延遲的數據處理。在處理大規模數據流時,Flink 用戶可能會遇到各種性能瓶頸,其中之一就是文件描述符的限制。文件描述符是操作系統用來表示打開文件或其他輸入/輸出資源的一…

雅菲奧朗SRE知識墻分享(一):『SRE對智能運維領域所產生的深遠影響』

一、SRE推動了運維與開發的融合1、增強協作:SRE模式鼓勵運維與開發團隊之間的緊密合作,共享知識、資源和責任,共同解決系統穩定性和性能問題。2、共同目標:通過共同設定系統可靠性和性能目標,運維和開發團隊能夠協同工…

【JVM內存結構系列】一、入門:先搞懂整體框架,再學細節——避免從一開始就混淆概念

在Java開發中,你是否遇到過這些困惑:明明代碼沒寫錯,卻突然拋出OutOfMemoryError?調優GC參數時,不知道-Xms和-XX:MetaspaceSize分別影響哪塊內存?面試時被問“JVM內存結構和Java內存模型有啥區別”,只能含糊其辭? 其實,這些問題的根源都指向同一個核心——沒搞懂JVM的…

《Dual Prompt Personalized Federated Learning in Foundation Models》——論文閱讀

面向大規模預訓練模型(ViT、BERT)的千萬級設備場景,用“雙提示(Dual Prompt)”機制實現高效、可擴展的個性化聯邦學習(PFL)1.研究背景傳統聯邦學習在客戶端數據異構(非獨立同分布&am…

深度剖析Lua Table的運作方式

前言&#xff1a;本篇基于Lua-5.3.6源碼并配合《Lua 解釋器構建&#xff1a;從虛擬機到編譯器》一書進行Table的運作解讀。一、Table數據結構typedef struct Table {CommonHeader;lu_byte flags; /* 1<<p means tagmethod(p) is not present */lu_byte lsizenode; /* l…

PETR/PETRv2

PE: position embedding 一、PETR算法動機回歸 1.1 DETR 輸入組成&#xff1a;包含2D位置編碼和Object Query 核心流程&#xff1a;通過Object Query直接索引2D特征圖&#xff0c;結合位置編碼迭代更新Query 特點&#xff1a;整體流程簡潔&#xff0c;每個Query代表一個潛在目標…

計算機大數據畢業設計推薦:基于Spark的氣候疾病傳播可視化分析系統【Hadoop、python、spark】

精彩專欄推薦訂閱&#xff1a;在下方主頁&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主頁&#xff1a;計算機畢設木哥&#x1f525; &#x1f496; 文章目錄 一、項目介紹二、…

英偉達顯卡GPU驅動的本質

我們來深入、詳細地探討一下英偉達&#xff08;NVIDIA&#xff09;GPU驅動程序的本質。 普通用戶眼中的驅動程序可能只是一個“讓顯卡工作的軟件”&#xff0c;但它的本質遠比這復雜和深刻。我們可以從幾個層面來理解它。 核心比喻&#xff1a;翻譯官、指揮官與優化大師 如果說…

算法 ---哈希表

一、哈希介紹 是什么 存儲數據的容器 什么用 快速查找某個元素 什么時候用哈希表 頻繁的查找某一個數的時候 怎么用哈希表 &#xff08;1&#xff09;容器&#xff08;哈希表&#xff09; &#xff08;2&#xff09;用數組模擬哈希表&#xff08;字符串的字符&#xf…

基于分布式環境的令牌桶與漏桶限流算法對比與實踐指南

基于分布式環境的令牌桶與漏桶限流算法對比與實踐指南 在高并發的分布式系統中&#xff0c;限流是保障服務可用性和穩定性的核心手段。本文聚焦于令牌桶算法與漏桶算法在分布式環境下的實現與優化&#xff0c;對多種解決方案進行橫向對比&#xff0c;分析各自的優缺點&#xff…

WPF MVVM入門系列教程(TabControl綁定到列表并單獨指定每一頁內容)

在以前的開發過程中&#xff0c;對于TabControl控件&#xff0c;我一般是習慣直接定義TabItem&#xff0c;在TabItem下布局&#xff0c;并進行綁定。 類似這樣 1 <TabControl ItemsSource"{Binding TabList}" SelectedIndex"0">2 <TabItem…

L2CAP 面向連接信道(CoC)在 BLE 中的應用:建立、流控與數據傳輸

在物聯網(IoT)蓬勃發展的今天,低功耗藍牙(BLE)技術因其高效節能、低成本等特性,成為短距離無線通信的首選方案。作為 BLE 協議棧的核心組件,邏輯鏈路控制與適配協議(L2CAP)的面向連接信道(CoC)承擔著數據傳輸的關鍵任務。本文將深入解析 L2CAP CoC 在 BLE 中的應用,…

醫療AI與醫院數據倉庫的智能化升級:異構采集、精準評估與高效交互的融合方向(上)

摘要: 隨著醫療信息化建設的深入,醫院數據倉庫(Data Warehouse, DW)作為醫療AI應用的核心數據底座,其效能直接決定智能化轉型的深度與廣度。本文聚焦醫療AI驅動下醫院數據倉庫的三大關鍵升級功能——異構采集支持數據庫體檢與智能SQL分析、評估引擎重構實現六大數據庫精準…

2015-2018年咸海流域1km歸一化植被指數8天合成數據集

數據集摘要數據集包含2015年-2018年咸海流域NDVI 8天均值數據。提取美國國家航空航天局中分辨率成像光譜儀MOD13A2產品第一波段作為歸一化植被指數數據&#xff0c;乘以比例因子0.0001&#xff0c;疊加咸海流域邊界數據&#xff0c;裁切后得到咸海流域范圍內的NDVI月均值數據。…