【數據結構】樹如何定義 | 如何存儲 | 實際應用

前言?

如上圖,A中的孩子的個數是不固定的。我們無法精確的每個不同的根結點有多少個孩子。所以并不能精確知道需要定義多少個孩子節點。

struct TreeNode
{int val;struct TreeNode* child1;struct TreeNode* child2;struct TreeNode* child3;//...//這樣顯然是不能的
};

樹的表示

指針數組表示法

? ?

#define N 6
//假設數的度為6
struct TreeNode
{int val;struct TreeNode* childArr[N];//指針數組-這些指針指向孩子數組
};

但是很顯然這個指針數組定義樹的存儲時有一個前提:那就是這個樹的度是確定好的

并且一個樹的度是所有結點中最大度的結點的度,但是并不是每一個結點的度均為樹的度,而是小于或者等于。那么這樣就會出現一種情況,好多節點的指針就會浪費

順序表表示法

那么解決這種情況,可以利用我們以前學習的順序表,需要幾個就插入幾個。

struct TreeNode
{int val;SeqList childSL;//順序表存儲孩子
};

左孩子右兄弟表示法(重點)

樹結構相對線性表就比較復雜了,要存儲表示起來就比較麻煩了,既然保存值域,也要保存結點和結點之間的關系,實際中樹有很多種表示方式如:雙親表示法,孩子表示法、孩子雙親表示法以及孩子兄弟表示法 等。我們這里就簡單的了解其中最常用的孩子兄弟表示法。?

//左孩子右兄弟
struct TreeNode
{int val;struct TreeNode* leftchild;struct TreeNode* rightbrother;
};

舉一個簡單的例子就是,假如我要生小孩,我想要生三個小孩,但是我覺得生三個小孩很麻煩,帶三個小孩很累啊,那我就可以先生老大,等老大有能力照顧弟弟妹妹的時候,我再生老二,同理再過幾年讓老二帶老三,那這樣我就可以輕松一點啦~

那么這里的“左孩子右兄弟”的原理也是類似的,我們可以看一下下面的圖例:

樹的實際應用

那么在實際情況中,我們什么時候會遇到樹呢?

在學習Linux操作系統中,我們可以知道Linux的文件系統的目錄樹,文件系統就是一個樹形結構。當前目錄下可以有很多個文件夾或者文件,那么文件夾就有可能是葉子,也有可能
會分下去,每個下面可以有任意多個孩子,那就是一個樹形結構。

  • 我們平時敲在Linux中敲的ls,其實底層就是鏈式結構的遍歷,通過找到父節點,然后找到第一個孩子,然后第一個孩子再去用兄弟指針找到把所有的兄弟都找出來。
  • 所以在Linux中,我們所學習的指令本質也就是一串代碼。每一個命令底層就是一個程序。目錄相關的文件相關的都是程序。
  • 但是在Windows操作系統中,其實就是一個森林,假如在電腦上插入一個U盤的話,那么就是一個森林。例如C盤、D盤、E盤等也就是一個森林。

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

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

相關文章

springboot 攔截器中使用@Value注解為null

攔截器中獲取配置參數為null 代碼如下: 解決方式一: 檢查你的WebMvcConfigurer實現類,比如我的是CCBWebMvcConfig 將攔截器以bean的形式注入: 我之前的寫法是new 一個放進去的,這種會導致Value為null AutowiredJSCCB…

2014年10月6日 Go生態洞察:Go在Google I/O和Gopher SummerFest的應用

🌷🍁 博主貓頭虎(🐅🐾)帶您 Go to New World?🍁 🦄 博客首頁——🐅🐾貓頭虎的博客🎐 🐳 《面試題大全專欄》 🦕 文章圖文…

《微信小程序開發從入門到實戰》學習二十七

3.4 開發參與投票頁面 3.4.2 借用偽造數據開發功能 為了便于開發,新建一個編譯模式: 之前沒看文章,每次都習慣性填完投票創建的信息提交再跳轉看效果。好累。 添加變異模式開發真方便。 另外,點擊提交后沒跳轉到投票頁面&#…

xorm源碼學習

文章目錄 XORM源碼淺析及實踐ORMORM vs. SQLXORM軟件架構 ORM 引擎 Engine——DBM*core.DB Golang:database/sql 源碼基本結構連接復用,提高性能。增加數據庫連接池數量連接管理 database/sql主要內容:sql.DB創建數據庫連接sql.Open()DB.conn…

Spring——感謝尚硅谷官方文檔

Spring——尚硅谷學習筆記 1 Spring簡介👾1.1 Spring概述1.2 Spring Framework1.2.1 Spring Framework特性1.2.2 Spring Framework五大功能模塊 2 IOC-IOC容器思想👾IOC容器思想IOC在Spring中的實現 3 IOC-基于XML文件管理Bean👾3.1 準備工作…

2023亞太杯數學建模A題思路 - 采果機器人的圖像識別技術

# 1 賽題 問題A 采果機器人的圖像識別技術 中國是世界上最大的蘋果生產國,年產量約為3500萬噸。與此同時,中國也是世 界上最大的蘋果出口國,全球每兩個蘋果中就有一個,全球超過六分之一的蘋果出口 自中國。中國提出了一帶一路倡議…

數據庫實驗四 索引創建與管理操作

數據庫實驗四 索引創建與管理操作 一、實驗目的二、設計性實驗三、觀察與思考 一、實驗目的 (1) 理解索引的概念與類型。 (2) 掌握創建、更改、刪除索引的方法。 (3) 掌握維護索引的方法。 二、設計性實驗 在數據庫job下創建worklnfo表。創建表的同時在id字段上創建名為inde…

【HarmonyOS】元服務卡片本地啟動拉起加桌沒問題,上架后拉起加桌時卡片展示異常

【關鍵字】 加桌選卡展示異常 、 2卡共用一個布局 、 代碼混淆 【問題現象】 元服務卡片在本地啟動拉起加桌時,多卡的選卡過程顯示是沒問題的。但是在上架后拉起加桌時,多卡的選卡過程卡片展示異常。 代碼邏輯是通過創建卡片的時候判斷卡片的尺寸大小…

數據結構與算法編程題13

設計算法將一個帶頭結點的單鏈表A分解為兩個具有相同結構的鏈表B、C,其中B表的結點為A表中值小于零的結點,而C表的結點為A表中值大于零的結點(鏈表A中的元素為非零整數,要求B、C表利用A表的結點) for example: A -1 2 …

SpringBoot + 通義千問 + 自定義React組件,支持EventStream數據解析!

一、前言 大家好!我是sum墨,一個一線的底層碼農,平時喜歡研究和思考一些技術相關的問題并整理成文,限于本人水平,如果文章和代碼有表述不當之處,還請不吝賜教。 最近ChatGPT非常受歡迎,尤其是…

virtualList 封裝使用 虛擬列表 列表優化

虛擬列表 列表優化 virtualList 組件封裝 virtualList 組件封裝 本虛擬列表 要求一次性加載完所有數據 不適合分頁 新建一個select.vue 組件頁面 <template><div> <el-select transfer"true" :popper-append-to-body"true"popper-class…

YOLOv8/5不顯示FLPOs

YOLOv8/5不顯示FLPOs,避免自媒體搬運,請下滑! YOLOv8/5不顯示FLPOs,避免自媒體搬運,請下滑! YOLOv8/5不顯示FLPOs,避免自媒體搬運,請下滑! YOLOv8/5不顯示FLPOs,避免自媒體搬運,請下滑! YOLOv8/5不顯示FLPOs,避免自媒體搬運,請下滑! YOLOv8/5不顯示FLPOs,避免自…

安裝第三方包報錯 error: Microsoft Visual C++ 14.0 or greater is required——解決辦法

1、問題描述 手動安裝第三方軟件時&#xff0c;可以使用setup.py&#xff0c;來安裝已經下載的第三方包。一般文件下會存在setup&#xff0c;在所要安裝庫的目錄下的cmd執行&#xff1a;python setup.py install報錯&#xff1a;error: Microsoft Visual C 14.0 or greater i…

所有權成果輸出(宗地基本信息表、界址標示表、界址簽章表、界址點成果表、宗地圖、界址說明表、調查審核表)

一、軟件界面&#xff1a; 二、軟件功能&#xff1a; 一、所有權成果要求(宗地基本信息表、界址標示表、界址簽章表、界址點成果表、宗地圖、界址說明表、調查審核表&#xff09; 1 不動產權籍調查表封面 &#xff08;1&#xff09;宗地&#xff08;海&#xff09;代碼&…

基于element-plus定義表單配置化擴展表單按鈕

文章目錄 前言一、新增btn.vue組件二、使用總結如有啟發&#xff0c;可點贊收藏喲~ 前言 在后臺管理系統一般都存在列表查詢&#xff0c;且可輸入數據進行查詢 基于element-plus定義表單配置化 新增按鈕配置化 一、新增btn.vue組件 <template><template v-for&qu…

代碼隨想錄算法訓練營第四十二天【動態規劃part04】 | 01背包、416. 分割等和子集

01背包問題 題目鏈接&#xff1a; 題目頁面 求解思路&#xff1a; 確定dp數組及其下標含義&#xff1a;dp[i][j] 表示從下標為 [0] 到 [i] 的物品里任意選取&#xff0c;放進容量為j的背包&#xff0c;此時的價值總和最大值確定遞推公式&#xff1a; 不放物品i&#xff0c;…

centos查看空間使用情況

查看磁盤使用空間 df -h 查看該目錄下其他目錄的大小 du -sh *

自動化測試框架[Cypress 常見的“坑”]

Cypress命令是異步的 假設使用Selenium時&#xff0c;有如下這段代碼

Unity中顏色空間Gamma與Linear

文章目錄 前言一、人眼對光照的自適應1、光照強度與人眼所見的關系2、巧合的是&#xff0c;早期的電子脈沖顯示屏也符合這條曲線3、這兩條曲線都巧合的符合 y x^2.2^&#xff08;Gamma2.2空間&#xff09; 二、Gamma矯正1、沒矯正前&#xff0c;人眼看電子脈沖顯示屏&#xff…