數據結構基礎:樹結構的學習筆記

1、樹的定義

樹是n(n>=0)個節點的有限集合。當n=0時稱為空樹,當n>0 為非空樹,任何非空樹中,有且僅有一個根節點;其余節點可分為m(m>=0)個互不相交的有限集合T1、T2 等,其中每一個集合都可以稱為一棵樹,稱為根節點的子樹。

2、樹的基本概念?

? ? ? ??雙親孩子、兄弟:節點的字數的根稱為該節點的孩子,該節點稱為其子節點的雙親。具有相同雙親的節點互為兄弟節點。如圖:A是根節點,B、C、D互為兄弟;B是E、F的父節點(雙親);E、F 互為兄弟節點。

節點的度:一個節點下的子節點個數稱為節點的度。比如 A的度為3,D的度為1。

葉子節點:是指度為0的節點,也被稱為終端節點。比如 C、E、F、G都是葉子節點。

內部節點:度不為零的節點稱為分支節點或非終端節點。去掉根節點,分支節點稱為內部節點。比如:B、D。

節點的層次:根節點A屬于第一層,依次類推。B屬于第二層,E屬于第三層。

樹的高度:一棵樹的最大層次數稱為樹的高度或者樹的深度。

有序(無序)樹:樹中的節點的各個子樹看成是從左到右有次序的,即不能交換,則稱為有序樹,否則為無序樹。

森林:m(m>=0)棵互補相交的樹的集合。

3、二叉樹

3.1 二叉樹定義

二叉樹是n(n>=0)個節點的有限集合,它或者是空樹(n=0),或者是由一個根節點及兩棵不相交的、分別稱為左子樹、右子樹的二叉樹所組成。

3.2 二叉樹和普通樹的區別

二叉樹中節點區分左子樹、右子樹,即便只有一個子樹的情況下也有標明是左子樹還是右子樹,普通樹則不區分;二叉樹中節點最大度為2,普通樹則沒有限制節點的度數。

3.3 二叉樹的性質

1、二叉樹第i層上最多有 ?2^(i-1)個節點

2、深度為k的二叉樹最多有(2^k)-1個節點

3、對任何一棵二叉樹,若其終端節點數為n,度為2的節點數為n2,則n=n2+1

4、具有n個節點的完全二叉樹的深度為(log2^n)+1

3.4 二叉樹分類

1、滿二叉樹:深度為k的二叉樹有2^(k-1)個節點,是滿二叉樹

2、完全二叉樹:高度為k的二叉樹,除了第k層都是滿的,稱為完全二叉樹。滿二叉樹也是完全二叉樹。具有n個節點的完全二叉樹高度為 (log2^n) +1

3、非完全二叉樹:不滿足完全二叉樹的稱為非完全二叉樹。

3.5叉樹的存儲結構

1、二叉樹的順序存儲結構

用一組地址連續的存儲單元存儲二叉樹的節點,必須把節點排成一個適當的線性序列,并且節點在這個序列中的相互位置可以反映出節點之間的邏輯關系

順序存儲適合對完全二叉樹的存儲方式,既簡單又節省空間。對于一般二叉樹而言,因為在順序存儲結構中,以節點在存儲單元中的位置來表示節點之間的關系,所以存儲方式也必須按照完全二叉樹的方式存儲,這樣會造成空間上的浪費。最壞的情況,一個深度為h且只有h個節點的二叉樹(也是單枝樹)需要(2^h) -1 存儲單元.

2、二叉樹的鏈式存儲結構

由于二叉樹中節點包含數據、左子樹根、右子樹根、雙親信息,因此可以用三叉鏈表或二叉鏈表來 存儲二叉樹,鏈表的頭指針指向二叉樹的根節點。

3.6 ?二叉樹的遍歷

遍歷是按某種策略訪問樹中的每個節點,僅訪問一次。對于含有n個節點的二叉樹遍歷算法的時間復雜度都是O(n).

3.7 ?哈夫曼樹(最優二叉樹)

節點的路徑:從樹的一個節點到另一個節點之前的通路。

該通路的分支數據稱為路徑長度。

節點的帶權路徑:節點到樹根之間的路徑長度*該節點的權重值。

樹的帶權路徑長度為樹種所有葉子節點的帶權路徑長度之和。數值最小的就是哈夫曼樹。

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

?

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

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

相關文章

android組件用法說明,Android第三方控件PhotoView使用方法詳解

Android第三方控件PhotoView使用方法詳解發布時間:2020-10-21 15:06:09來源:腳本之家閱讀:74作者:zhaihaohao1PhotoView的簡介:這是一個圖片查看庫,實現圖片瀏覽功能,支持pinch(捏合)手勢或者點…

idea中新建分支并且切換到新建的分支上

開發新功能,idea上新建自己的分支,要在dev分支上新建 首先,idea右下角可以看到目前在dev分支上 點擊dev,接著New Branch 輸入分支名 在Local Branches中就顯示了 然后可以看到已經切換到剛新建的分支上了 想要切換到剛新建的分支上開發時,可以點擊分支,在彈框上點擊Checkout

vnpy怎么創建策略并回測_【手把手教你】入門量化回測最強神器backtrader(一)

1 引言目前基于Python的量化回測框架有很多,開源框架有zipline、vnpy、pyalgotrader和backtrader等,而量化平臺有Quantopian(國外)、聚寬、萬礦、優礦、米筐、掘金等,這些量化框架或平臺各有優劣。就個人而言&#xff…

數據結構基礎:算法的基礎知識筆記

1、算法的概念算法是問題求解過程中的精確描述,它為解決某一特定類型的問題規定了一個運算過程。2、算法的特點2.1 有窮性一個算法必須在有窮的步驟結束后結束,并且每一步都在有窮時間內完成。2.2 確定性算法的執行過程中每一步都要有確定的定義&#xf…

Spring Bean Scope 有狀態的Bean 無狀態的Bean

在Spring的Bean配置中&#xff0c;存在這樣兩種情況&#xff1a; [xhtml] view plaincopy<bean id"testManager" class"com.sw.TestManagerImpl" scope"singleton" /> <bean id"testManager" class"com.sw.TestMana…

數據結構基礎:圖結構的學習筆記

1、圖的定義圖是比樹更加復雜的數據結構&#xff0c;在圖的結構當中&#xff0c;任意兩個節點之間都有可能有直接關系&#xff0c;所以圖中一個節點的前驅和后繼的數目是沒有限制的。2、圖的用途用于描述各種復雜的數據對象&#xff0c;在自然科學、社會科學和人文科學等很多領…

企業網站 源碼 服務郵箱:_企業網站建設對于服務器的選擇至關重要

網站建設是離不開租用服務器的&#xff0c;這是目前大多數企業都在做的。但有些企業由于對網站服務器的租用技巧及經驗的缺乏&#xff0c;經常會導致網站在運營過程中出現非常多的問題&#xff0c;嚴重影響了企業業務的正常開展。石家莊網站建設方面的人才來說明幾點不容忽視的…

linux sli 提高效率,從原理到性能提升 MCP78智能SLI全解析

NVIDIA正式發布了“Hbrid SLI”技術在昨日的2008 CES上&#xff0c;NVIDIA正式向外界發布了“Hbrid SLI”技術&#xff0c;即我們所俗稱的混合SLI&#xff0c;而NVIDIA在發布時已更正式名為“智能SLI技術”。雖然這僅僅是NVIDIA在此次消費電子展上的宣講主題之一&#xff0c;但…

git操作代碼文件的顏色變化

1.若文件顯示紅色&#xff0c;表示文件未add到git進行管理 2.若文件顯示綠色&#xff0c;表示文件已經交給git管理&#xff0c;但從未上傳到遠程倉庫中 3.若文件顯示藍色&#xff0c;表示文件已經上傳過遠程倉庫&#xff0c;且此時本地文件與遠程倉庫文件不一致 4.若文件顯示…

[GitHub]第三講:簡單分支操作

Git 最核心的操作對象是版本&#xff08; commit &#xff09;&#xff0c;最核心的操作技巧就是分支。 什么是分支&#xff1f; 倉庫創建后&#xff0c;一旦有了新 commit&#xff0c;默認就會放到一個分支上&#xff0c;名字叫 master。前面咱們一直看到的多個版本組成的一條…

算法基礎:常用的排序算法知識筆記

1、算法外排序分類2、冒泡排序冒泡排序&#xff08;Bubble Sort&#xff09;屬于交換排序&#xff0c;它的原理是&#xff1a;循環兩兩比較相鄰的記錄&#xff0c;如果反序則交換&#xff0c;直到沒有反序的記錄為止。實現算法&#xff1a;/*** 冒泡排序優化后的算法* 設置一個…

302狀態碼_http狀態碼是什么?301 302 404的SEO應用場景

什么是HTTP狀態碼&#xff1f;簡單的講&#xff0c;就是用以表示網頁服務器HTTP響應狀態的3位數字代碼。其中1xx表示臨時響應&#xff0c;2xx表示成功處理了請求&#xff0c;3xx代表重定向&#xff0c;4xx表示請求錯誤&#xff0c;而5xx表示服務器錯誤。除了網頁正常返回200之外…

Android高版本開機廣播,android3.1以上,假如程序沒有啟動過,怎么獲取開機廣播呢?...

官方說不支持&#xff1a;Launch controlson stopped applicationsStarting from Android 3.1, the systems package manager keepstrack of applications that are in a stopped state and provides ameans of controlling their launch from background processes andother a…

git push前請先git pull

開發過程中 如果要推送代碼到遠程倉庫&#xff0c;請先git pull。養成好習慣。 原因很簡單&#xff0c;在你開發過程中&#xff0c;你的同事可能也在改代碼然后他提交了沒通知你&#xff0c;你直接git push很容易造成代碼沖突&#xff0c;代碼沖突解決也簡單&#xff0c;可萬一…

table 中 thead tbody tfoot 加載順序問題

這幾個標記主要是用于提高table標簽的加載以及顯示的&#xff0c;說白了&#xff0c;就是分布加載。在傳統的瀏覽器&#xff0c;在加載 時&#xff0c;是當所有的標簽中元素都被下載后才會顯示&#xff0c;當然這樣的用戶體驗是不好的。再加入了這幾個t打頭的標簽后&#xff0c…

算法基礎:常用的查找算法知識筆記

1、查找表和查找效率的概念查找表是指由同一類型的數據元素構成的集合。分為靜態查找表和動態查找表。1.1 靜態查找表1、查詢某個特定元素是否在查找表的集合當中2、查詢某個特定元素的各種屬性1.2 動態查找表1、在查找表中插入一個數據元素2、在查找表中刪除一個元素1.3 關鍵字…

注解參數怎么使用變量_硅橡膠膠水有哪些特點?使用參數表現的怎么樣?如何儲存?...

作為單組分產品&#xff0c;硅橡膠膠水的使用方法簡單又靈活。直接涂抹在粘接基面上&#xff0c;固化之后即可抵抗外界的壓力與沖擊。別看它的規格不是很打&#xff0c;卻可以順順利利完成粘接&#xff0c;形成保護膜。硅橡膠膠水有哪些特點?沒有固化之前&#xff0c;是半透明…

android 谷歌郵箱,Android 使用 SMTP 發送郵件 (Gmail)

具體使用方法請看&#xff1a;http://www.oschina.net/code/snippet_12_9831.[代碼]GMailSender.javapackage org.apache.android.mail;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.mail.Message;import javax.mail.PasswordAuthent…

Java中return的兩種用法

一、return語句總是用在方法中&#xff0c;有兩個作用。 一個是返回方法指定類型的值&#xff08;這個值總是確定的&#xff09;。 一個是結束方法的執行&#xff08;僅僅一個return語句&#xff09;。 一般的就百是用在有反回值的方法中&#xff0c;用來返回方度法指定問類…

Alpha版總結會議

一、會議過程 我們于第十五周周一開始在學院樓針對前一段時間開發過程中的問題進行了討論。會議期間我們整合并回顧了一下兩次沖刺周期的成果。會議開始首先每個人都先發表了自己針對Alpha版開發過程中存在的疑惑和一些問題的看法。我們最后挑選出出三個最具針對性的問題進行了…