樹的數據結構分類

一、樹

在這裏插入圖片描述

概念定義

  • 節點:樹的結點包含一個數據元素及若干指向其子樹的分支
  • 節點的度:節點擁有的子樹數量稱爲節點的度(Degree)
  • 樹的度:是指樹內個結點的度的最大值
  • 孩子與雙親:結點的子樹的根稱爲該結點的孩子(Child),相應地,該結點稱爲孩子的雙親(Parent)
  • 兄弟:同一個雙親的孩子之間互稱兄弟(Sibling)
  • 節點的祖先:從根到該結點所經分支上的所有結點
  • 節點的子孫:對應地,以某結點爲根的子樹中的任一結點都稱爲該結點的子孫
  • 樹的層次(Level):從根開始,根爲第一層,根的孩子爲第二層等。。。。
  • 樹的深度:樹中結點的最大層次稱爲樹的深度(Depth)或高度
  • 森林(Forest) 是m(m≥0)棵互不相交的樹的集合

二、二叉樹(Binary Tree)

定義

它的特點是每個結點至多有兩棵子樹(即二叉樹中不存在度大於2的結點),且二叉樹的子樹有左右之分,其次序不能任意顛倒(有序樹)

性質

  • 性質1)在二叉樹的第i層上至多有2i−1個結點(i≥1)。
  • 性質2)深度爲k的二叉樹至多有2k−1個結點(k≥1)。
  • 性質3)對任何一棵二叉樹,如果其葉子節點數爲n0,度爲2的結點數爲n2,則n0=n2+1。

語言定義:

class TreeNode(object):
    def __init__(self,data=None,left=None,right=None):
        self.data = data
        self.left = left
        self.right = right

分類

在這裏插入圖片描述

1.1完全二叉樹

在一棵二叉樹中,除了最後一層,都是滿的,並且最後一層或者是滿的,或者是右邊缺少連續若干節點,成爲完全二叉樹
在這裏插入圖片描述
性質

  • 性質4) 具有n個結點的完全二叉樹的深度爲[log2n]+1,其中[x]表示不大於x的最大整數。
  • 性質5) 如果對一棵有n個結點的完全二叉樹的結點按層序編號(從第一層到最後一層,每層從左到右),則對任一結點i(1≤i≤n),有:
    (1) 如果i=1,則結點i是二叉樹的根,無雙親;如果i>1,則其雙親結點爲[1/2]。
    (2) 如果2i>n,則結點i無左孩子;否則其左孩子是結點2i。
    (3) 如果2i+1>n,則結點i無右孩子;否則其右孩子是結點2i+1。

1.2滿二叉樹

最後一層也是滿的完全二叉樹
在這裏插入圖片描述

性質

  • 深度爲k的滿二叉樹,有2k−1個節點

2.1二叉搜索(查找)樹/排序二叉樹

節點滿足左子樹所有節點<根節點<右子樹所有節點,不存在相等值的節點
在這裏插入圖片描述

2.2平衡二叉樹(BBT)

是一種結構平衡的二叉搜索樹,即葉子節點深度差不超過1,能夠在O(logn)內完成插入、查找和刪除操作,結構如圖所示,常見的平衡二叉樹有AVl樹、紅黑樹等。
在這裏插入圖片描述

2.3自適應平衡二叉搜索樹AVL (Adelson-Velsky-Landis Tree)

2.4紅黑樹

是一種自平衡二叉查找樹,又稱爲“對稱二叉B樹”,除了滿足所有二叉查找樹的要求之外還需要滿足以下要求:

(1)節點是紅色或者是黑色的

(2)根節點是黑色的

(3)每個葉子節點都是黑色的(葉子是NIL節點)

(4)每個紅色節點必須有兩個黑色節點(從葉子到根節點的所有簡單路徑上不可能有兩個連續的紅色節點)

(5)從任一節點到其每個葉子的所有簡單路徑都飽和相同數目的節點

注:

NIL節點就是空節點,二叉樹中庸NIL節點代替NULL
簡單路徑:指頂點序列中頂點不重複出現的路徑

在這裏插入圖片描述

2.5二叉堆

滿足:

  1. 完全二叉樹
  2. 父節點值>=子節點值:最大堆/大跟堆
    父節點值<=子節點值:最小堆/小根堆
    在這裏插入圖片描述
    在這裏插入圖片描述

用途

  1. 堆排序
  2. Top K問題

三、B-Tree/B-樹/B樹

B-tree樹即B樹,B即Balanced,即平衡樹,是爲了提高查詢效率而設計的一種多路平衡搜索樹。

詳細講解參考
https://www.cnblogs.com/sunsky303/p/11497448.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章