初階數據結構--樹

1. 樹的概念與結構

樹是?種?線性的數據結構,它是由 n(n>=0) 個有限結點組成?個具有層次關系的集合。把它叫做 樹是因為它看起來像?棵倒掛的樹,也就是說它是根朝上,?葉朝下的。

  • 有?個特殊的結點,稱為根結點,根結點沒有前驅結點。

  • 除根結點外,其余結點被分成 M(M>0) 個互不相交的集合 T1、T2、……、Tm ,其中每?個集合Ti(1 <= i <= m) ?是?棵結構與樹類似的?樹。每棵?樹的根結點有且只有?個前驅,可以 有 0 個或多個后繼。因此,樹是遞歸定義的。
    在這里插入圖片描述

注意:

  • 樹形結構中,?樹之間不能有交集,否則就不是樹形結構。(如果存在相交就是圖了)
  • 除了根結點外,每個結點有且僅有?個父節點
  • ?棵N個結點的樹有N-1條邊(箭頭)

2. 樹的相關術語

在這里插入圖片描述

父結點/雙親結點:若一個結點含有子結點,則這個結點稱為其子結點的父結點;如上圖:A是B的父結點

子結點/孩子結點:一個結點含有的子樹的根結點稱為該結點的子結點;如上圖:B是A的孩子結點

結點的度:一個結點有幾個孩子,他的度就是多少;比如A的度為6,F的度為2,K的度為0

樹的度:一棵樹中,最大的結點的度稱為樹的度;如上圖:樹的度為 6

葉子結點/終端結點:度為 0 的結點稱為葉結點;如上圖:B、C、H、I… 等結點為葉結點

分支結點/非終端結點:度不為 0 的結點;
如上圖:D、E、F、G… 等結點為分支結點

兄弟結點:具有相同父結點的結點互稱為兄弟結點(親兄弟);如上圖:B、C 是兄弟結點

結點的層次:從根開始定義起,根為第 1 層,根的子結點為第 2 層,以此類推;

樹的高度或深度:樹中結點的最大層次;如上圖:樹的高度為 4

結點的祖先:從根到該結點所經分支上的所有結點;如上圖:A 是所有結點的祖先

路徑:一條從樹中任意節點出發,沿父節點-子節點連接,達到任意節點的序列;比如A到Q的路徑為:A-E-J-Q;H到Q的路徑H-D-A-E-J-Q

子孫:以某結點為根的子樹中任一結點都稱為該結點的子孫。如上圖:所有結點都是A的子孫

森林:由 m(m>0) 棵互不相交的樹的集合稱為森林;

3. 樹的表示

樹結構相對于線性表就比較復雜了,要存儲和表示起來就比較麻煩了,實際中樹有很多種表示方法。如:雙親表示法、孩子表示法、孩子兄弟表示法等等。其中最常用的是孩子兄弟表示法
孩子兄弟表示法中,所定義的結點類型大致是這樣的:

struct TreeNode
{struct Node* child;   //第一個孩子結點struct Node* brother;  //指向下一個兄弟結點DataType data;             //結點中的數據域
};

在這里插入圖片描述

4. 樹形結構實際運用場景

文件系統是計算機存儲和管理文件的一種方式,它利用樹形結構來組織和管理文件和文件夾。在文件系統中,樹結構被廣泛應用,它通過父結點和子結點之間的關關系來表示不同層級的文件和文件夾之間的關聯。
在這里插入圖片描述

5. 二叉樹

5.1 二叉樹的概念與結構

在樹形結構中,最常?的就是?叉樹,?棵?叉樹是結點的?個有限集合,該集合由?個根結點加上兩棵別稱為左?樹和右?樹的?叉樹組成或者為空。
在這里插入圖片描述

從上圖可以看出?叉樹具備以下特點:

  1. ?叉樹不存在度?于 2 的結點
  2. ?叉樹的?樹有左右之分,次序不能顛倒,因此?叉樹是有序樹

注意:對于任意的?叉樹都是由以下?種情況復合?成的。

在這里插入圖片描述

5.2 特殊的二叉樹

5.2.1 滿二叉樹

?個?叉樹,如果每?個層的結點數都達到最?值,則這個?叉樹就是滿?叉樹。也就是說,如果?個?叉樹的層數為 K ,且結點總數是 2 k ? 1 2^k - 1 2k?1 ,則它就是滿?叉樹。

在這里插入圖片描述

5.2.2 完全二叉樹

完全二叉樹 是效率很高的數據結構,完全二叉樹是由滿二叉樹而引出來的。

對于深度為 K 的,有 n 個結點的二叉樹,當且僅當其每一個結點都與深度為 K 的滿二叉樹中編號從 1n 的結點一一對應時稱之為完全二叉樹。

要注意的是,滿二叉樹 是一種特殊的完全二叉樹,完全二叉樹是從左到右的。

在這里插入圖片描述

5.2.3 二叉樹的性質
  • 性質一:若規定根結點的層數為 1 1 1,則一棵非空二叉樹的第i層上最多有 2 i ? 1 2i-1 2i?1個結點。
  • 性質二:若規定根結點的層數為 1 1 1,則深度為h的二叉樹的最大結點數為 2 h ? 1 2h-1 2h?1個。
  • 性質三:對任何一棵二叉樹,如果度為0的葉結點個數為 n 0 n0 n0,度為2的分支結點個數為 n 2 n2 n2,則有 n 0 = n 2 + 1 n0 = n2+1 n0=n2+1
  • 性質四:若規定根結點的層數為 1 1 1,則具有N個結點的滿二叉樹的深度 h = l o g 2 ( N + 1 ) h = log2(N+1) h=log2(N+1)
  • 性質五:若規定結點層數為 1 1 1,具有 n n n個結點的滿二叉樹的深度
  • 性質六:對于具有 N N N個結點的完全二叉樹,如果按照從上至下、從左至右的數組順序對所有結點從0開始編號,則對于序號為i的結點:
    • 若 i > 0,則該結點的父結點序號為:( i - 1) / 2;若 i = 0,則無父結點。
    • 若2i + 1 < N,則該結點的左孩子序號為:2i + 1;若2i + 1 >= N,則無左孩子。
    • 若2i + 2 < N,則該結點的右孩子序號為:2i + 2;若2i + 2 >= N,則無右孩子。

5.3 二叉樹的存儲結構

5.3.1 順序結構

順序結構存儲就是使用數組來存儲,一般使用數組只適合表示完全二叉樹,因為不是完全二叉樹會有空間的浪費,完全二叉樹更適合使用順序結構存儲

在這里插入圖片描述

現實中通常把(一種二叉樹)使用順序結構的數組來存儲,需要注意的是這里的堆和操作系統虛擬進程地址空間中的堆是兩回事,一個是數據結構,一個是操作系統中管理內存的一塊區域分段。

5.3.2 鏈式結構

二叉樹的鏈式存儲結構是指,用鏈表來表示一棵二叉樹,即月用鏈來指示元素的邏輯關系。通常的方法是鏈表中每個結點由三個域組成,數據域左右指針域,左右指針分別用來給出該結點左孩子和右孩子所在的鏈結點的存儲地址。鏈式結構又分為二叉鏈和三叉鏈,當前我們學習中一般都是二叉鏈。后面學到高階數據結構如紅黑樹等會用到三叉鏈。
在這里插入圖片描述

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

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

相關文章

硬件工程師面試問題(五):藍牙面試問題與詳解

藍牙技術作為物聯網與智能設備的核心無線協議&#xff0c;其硬件設計能力直接影響產品連接穩定性、功耗及兼容性。面試是評估候選人射頻電路設計、天線優化、協議棧調試等綜合技能的關鍵環節&#xff0c;尤其在BLE低功耗設計、共存抗干擾等場景中&#xff0c;硬件工程師的實踐經…

Redis-基本數據類型

Redis支持的基本數據類型&#xff1a;String、hash、list、Set、Zset 一、String 特點 可以存儲三種類型 int、float、string 運用場景 緩存&#xff1a;存儲HTML片段、用戶會話&#xff08;Session&#xff09;計數器&#xff1a;網站訪問量、點贊數&#xff08;incr方法&am…

Tomcat的部署

Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器&#xff0c;屬于輕量級應用服務器&#xff0c;在中小型系統和 并發訪問用戶不是很多的場合下被普遍使用&#xff0c;Tomcat 具有處理HTML頁面的功能&#xff0c;它還是一個Servlet和 JSP容器 官網:Apache Tomcat - Welco…

Linux的TCP連接數到達2萬,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出現什么問題

當 Linux 系統的 TCP 連接數達到 2 萬,且 /proc/net/sockstat 中的 tcp_tw(TIME_WAIT 連接)、tcp_alloc(已分配但未完全建立的連接)和 tcp_inuse(正在使用的連接)均處于高位時,可能會引發以下問題: 一、關鍵指標分析 通過 /proc/net/sockstat 可以查看 TCP 連接狀態:…

服務器數據恢復—Raid6陣列硬盤故障掉線,上層虛擬機數據如何恢復?

服務器數據恢復環境&故障&#xff1a; 一臺由16塊硬盤組成的raid6磁盤陣列。磁盤陣列中有一塊硬盤因為物理故障掉線&#xff0c;導致服務器上層虛擬機無法正常使用&#xff0c;部分分區丟失&#xff0c;重啟物理服務器后發現數據丟失。 服務器數據恢復過程&#xff1a; 1、…

Unhandled exception: org.apache.poi.openxml4j.exceptions.InvalidFormatException

代碼在main方法里面沒有報錯&#xff0c;在Controller里面就報錯了。 原來Controller類里面少了行代碼 import org.apache.poi.openxml4j.exceptions.InvalidFormatException; 加上去就解決了。

RISC-V debug專欄2 --- Debug Module(DM)

Debug Module&#xff08;DM&#xff09;的核心功能 DM 就像一個翻譯官&#xff0c;負責把調試器的抽象指令&#xff08;比如 “暫停處理器”&#xff09;轉換成硬件能聽懂的具體操作。它必須實現以下基本功能&#xff1a; 必要功能&#xff08;必須實現&#xff09;&#xff…

infinityfree最新免費建站詳細教程_無需備案_5G空間_無限流量_免費域名_免費SSL

一、明確目標—是否要使用 1.為什么選擇InfinityFree&#xff1f; 對于初學者、學生或只是想嘗試網站搭建的個人用戶來說&#xff0c;InfinityFree提供了一個絕佳的免費解決方案。這個國外免費的虛擬主機服務提供&#xff1a; 5GB存儲空間 - 足以存放個人博客、作品集或小型…

我與數學建模之終章

自美賽失利之后&#xff0c;就開始忙活別的了&#xff0c;因為數學競賽國賽當時還沒收到通知&#xff0c;所以就在準備寫論文&#xff0c;最后論文拿去交挑戰杯競賽了&#xff0c;拿了個校一省一國三。 在寫論文過程中&#xff0c;通知去上海參加數學競賽&#xff0c;其實當時…

大學生機器人比賽實戰(三)經驗篇

大學生機器人比賽一等獎實戰指南&#xff1a;從組隊到奪冠的全流程策略 參加大學生機器人比賽并斬獲一等獎是許多理工科學子的夢想&#xff0c;這不僅是對技術能力的認可&#xff0c;更是未來深造和就業的重要加分項。本文將從團隊組建、技術攻關、項目管理、比賽策略和心理建…

關于UDP端口掃描概述

盡管互聯網上大多數流行服務都基于 TCP 協議運行&#xff0c;但 UDP 服務也廣泛部署。DNS、SNMP 和 DHCP&#xff08;注冊端口 53、161/162 和 67/68&#xff09;是最常見的服務之一。 由于 UDP 掃描通常比 TCP 掃描更慢、更困難&#xff0c;一些安全審計人員可能會忽略這些端…

美團滑塊 分析

聲明 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 逆向過程 距離識別不準簡單學習一下&…

SpringBoot配置文件多環境開發

目錄 一、設置臨時屬性的幾種方法 1.啟動jar包時&#xff0c;設置臨時屬性 ?2.idea配置臨時屬性 3.啟動類中創建數組指定臨時屬性 二、多環境開發 1.包含模式 2.分組模式 三、配置文件的優先級 1.bootstrap 文件優先&#xff1a; 2.特定配置文件優先 3.文件夾位置優…

開發一個小程序需要多久時間?小程序軟件開發周期

開發一個小程序所需時間受多種因素影響&#xff0c;以下為你詳細列舉&#xff1a; 一、需求復雜度。若只是簡單展示類小程序&#xff0c;如企業宣傳、產品介紹&#xff0c;功能單一&#xff0c;大概 1 - 2 周可完成。若涉及復雜交互&#xff0c;像電商小程序&#xff0c;涵蓋商…

Linux 基礎入門指南:用戶管理、基本命令(一)

摘要&#xff1a;Xshell登錄、用戶管理、修改字體與配色方案。操作系統概要。Linux文件系統基礎。相關命令&#xff1a;pwd, ls, cd, mkdir, rmdir, rm,touch, nano, tree; adduser, passwd 目錄 一、系統登錄與用戶管理 1. 登錄方式 &#xff08;1&#xff09;命令行登錄 …

【python】:使用Qt Creator 管理python項目

一、引言&#xff08;也許適合小眾的你&#xff09; 如果你跟我一樣&#xff0c;有時候開發點小項目&#xff0c;既有Qt的需求&#xff0c;又有python項目需求,除了VS以外&#xff0c;Qt Creator同時滿足這兩種語言的項目開發需求和無縫項目切換&#xff0c;目前來看確實是比較…

【簡單數論】(模運算,快速冪,乘法逆元,同余,exgcd,gcd,歐拉函數,質數,歐拉篩,埃式篩,調和級數枚舉,約數,組合數)

數論 模運算 a m o d b a ? ? a / b ? b a\ mod \ b a - \lfloor a / b \rfloor \times b a mod ba??a/b?b n m o d p n \ mod\ p n mod p得到的結果的正負至于被除數 n n n有關 模運算的性質&#xff1a; ( a b ) m o d m ( ( a m o d m ) ( b m o d m ) ) m …

006貪心——算法備賽

跨步問題 跳躍游戲|| 問題描述 給定一個長度為 n 的 0 索引整數數組 nums。初始位置為 nums[0]。 每個元素 nums[i] 表示從索引 i 向后跳轉的最大長度。換句話說&#xff0c;如果你在 nums[i] 處&#xff0c;你可以跳轉到任意 nums[i j] 處: 0 < j < nums[i]i j &…

MySQL學習筆記(三)——圖形化界面工具DataGrip

目錄 1. 圖形化界面工具 2.下載 3. 安裝 3.1 安裝步驟 3.2 激活說明 4. 使用 4.1 漢化教程 4.2 使用 1. 圖形化界面工具 上述&#xff0c;我們已經講解了通過 DDL 語句&#xff0c;如何操作數據庫、操作表、操作表中的字段&#xff0c;而通過 DDL 語句執行在命令進行操…

編程題學習

acwing 826. 單鏈表 #include <iostream>using namespace std;const int N 100010;int idx, e[N], ne[N], head;void init() {head -1;idx 0; }void insert_head(int x) {e[idx] x;ne[idx] head;head idx ; }void delete_k_pos(int x, int k) {e[idx] x;ne[idx…