JS資料結構(9) 樹結構,二叉樹

2021-10-07 21:42:59 字數 2315 閱讀 5079

1.什麼是樹結構

樹結構是一種非線性結構,以分層的方式儲存資料。

現實中關於樹結構的例子有家譜,還有公司的組織架構等。

樹結構的抽象:

樹結構的優點:

每種資料結構都有自己特定的應用場景,樹結合了其他資料結構(陣列,鍊錶,雜湊表)的優點。在模擬某些場景時,我們使用樹結構會更加的方便。

因為樹結構是非線性的,可以表示一對多的關係,我們可以使用樹表示檔案的目錄結構。

2.樹結構的術語

樹(tree):n(n>=0)個節點構成的有限集合。

空樹:n = 0 時,就稱為乙個空樹。

根(root):位於樹頂部的節點,它沒有父節點。

子樹(subtree):子樹由節點和它的後代構成。

父節點:有子樹的節點是它的子樹的根節點的父節點。

子節點:a是b的父節點,則b是a的子節點。

兄弟節點:具有同乙個父節點的不同子節點互稱為兄弟節點。

節點的度:節點的子樹個數。

樹的度:樹的所有節點中最大的度數。

葉節點:度為0的結點。

節點的層次:根節點是第一層,其他的節點的層次是它的父節點的層次加1。

樹的深度:數中所有節點的最大層次是這棵樹的深度。

路徑和路徑長度:從節點a到節點h的路徑是乙個節點序列a,b,c…,h。路徑所包含邊的個數為路徑的長度。

3.樹的表示方法

(1)最普通的表示法

但是以這個方法表示樹,因為樹的節點個數不一樣,所以在定義的時候很難實現。

(2)兒子-兄弟表示法

每乙個節點由三個屬性表示(資料,左子節點,兄弟節點)

比如a節點(資料是a,左子節點是b,無兄弟節點)

比如c節點(資料是c,左子節點是g,兄弟節點是d)

(3)兒子-兄弟表示法旋轉

旋轉之後,就變成了乙個二叉樹(每個節點最多只能有兩個子節點)

任何的一棵樹,都可以用二叉樹來模擬出來。

4.二叉樹

二叉樹:樹中的每個節點最多只能有兩個子節點。

二叉樹由根節點,左子樹(tl)和右子樹(tr)組成。

二叉樹可以為空,也就是沒有節點。

二叉樹的形態:

二叉樹的重要特性:

乙個二叉樹的第i層的最大節點數是:2^(i-1) ,i >= 1

深度為k的二叉樹最大節點數是:2^k - 1, k >= 1

對於任何非空二叉樹,若n0表示葉節點的個數,n2是度為2的非葉節點的個數,那麼 n0=n2+1

二叉樹的儲存:

二叉樹常見的儲存方式是陣列和鍊錶。

(1)使用陣列:

完全二叉樹:從上至下,從左至右順序儲存。

但是大部分情況都不是完全二叉樹。

如果把所有的二叉樹都按照完全二叉樹來儲存的話,會造成很大的空間浪費。

(2)使用鍊錶(常用):

把每個節點封裝成乙個node節點,node中包含儲存的資料,左節點的指標,右節點的指標。

node節點:

二叉樹:

還有一種特殊的二叉樹——二叉搜尋樹

關於二叉搜尋樹可以看我的另外一篇部落格 二叉搜尋樹

資料結構 二叉樹結構

資料結構 二叉樹結構 定義 一棵二叉查詢樹 bst 是一棵二叉樹,其中每個結點都含有乙個comparable的鍵 以及相關聯的值 且每個結點的鍵都大於其左子樹中的任意結點的鍵而小於右子樹的任意結點的鍵。完全二叉樹 將結點按從左到右,再從上到下的順序排布,得到的二叉樹就是完全二叉樹。例如有10個結點,...

資料結構 樹結構 二叉樹 完全二叉樹 滿二叉樹

樹結構是一種描述非線性層次關係的資料結構。除根結點外,其餘每個結點有且僅有乙個直接前驅。每個結點可以有任意多個直接後繼。英文名詞表示 tree,root,node,leaf,edge,child,subtree 要麼二叉樹沒有根結點,是一棵空樹。要麼二叉樹由根結點,左子樹,右子樹組成,且左子樹和右子...

樹結構 二叉樹

二叉樹 如果書中的每個節點最多只有兩個子節點,這樣的樹就叫做二叉樹 1.二叉樹的重要特性 二叉樹第 i 層的最大節點數為 2 i 1 i 1 深度為 k 的二叉樹最大節點總數為 2 k 1 對於任何乙個非空二叉樹t,若n0表示葉節點的個數,n2為度為2的非空葉節點個數,那麼兩者滿足 n0 n2 1 ...