• 非線性結構
  • 樹是n(n >= 0)個元素的集合:
    • (1)每個元素稱為結點(node);
    • (2)有一個特定的結點,稱為根結點或根(root);
    • (3)除根結點外,其余結點被分成m(m>=0)個互不相交的有限集合,而每個子集又都是一棵樹(稱為原樹的子樹Subtree)
  • 注意
    • n = 0時,稱為空樹
    • 樹只有一個特殊的沒有前驅的元素,稱為樹的根(Root)
    • 樹中除了根結點外,其余元素只能有一個前驅,可以有零個或多個后繼
    • 子樹也有自己的根

樹的概念

  • 結點(node):樹中的數據元素
  • 結點的度(degree):結點擁有的子樹的數目稱為度(該結點的分支數),記作d(v)
  • 葉子結點:結點的度為0,稱為葉子結點leaf、終端結點、末端結點
  • 分支結點:結點的度不為0,稱為非終端結點或分支結點
  • 分支:結點之間的關系
  • 內部結點:除根結點外的分支結點,也不包括葉子結點
  • 樹的度是樹內各結點的度的最大值。? D子樹的度就是3

59df2441cf5be4075000000f

  • 孩子結點(Child):
    • B是A的孩子
  • 雙親結點(Parent):
    • C是E,F的雙親
  • 兄弟結點(Sibling):
    • 具有相同雙親結點的結點
    • B和C是兄弟
  • 祖先結點:
    • 從根結點到該結點所經分支上所有的點
    • A,B,D都是G的祖先結點
  • 子孫結點:
    • 結點的所有子樹上結點都稱為該結點的子孫
    • C的子孫是E,F,J
  • 結點的層次(level):
    • 根結點為第一層,根的孩子為第二層,以此類推,記作L(v)
  • 樹的深度(高度Depth):
    • 樹的層次的最大值
    • 上圖樹深度為4
  • 堂兄弟:
    • 雙親在同一層的結點
    • D,E或F是堂兄弟

59df2441cf5be4075000000f

  • 有序樹
    • 結點的子樹是有順序的(兄弟有大小,先后次序)
  • 無序樹
    • 結點的子樹是無序的,可以交換
  • 路徑
    • 一條線串下來的,前一個都是后一個的雙親結點
  • 路徑長度 ? = ? 路徑上的結點數 – 1 ,也是分支數
  • 森林
    • m(m>=0)顆不相交的樹的集合
    • 對于結點而言,其子樹的集合就是森林。
    • A結點的2顆子樹的集合就是森林

樹的特點

  • 唯一的根
  • 子樹不相交
  • 除根以外,每個元素只能有一個前驅,可以有零個或多個后繼
  • 根結點沒有雙親,葉子結點沒有孩子
  • vi是vj的雙親,則L(vi) = L(vj) – 1, 也就是說雙親比孩子結點的層次小1
  • 堂兄弟的雙親未必是兄弟,例如I,J是堂兄弟,而他們的雙親也是堂兄弟

二叉樹

  • 每個結點最多2顆子樹
    • 二叉樹不存在degree > 2 的結點
  • 是有序樹,左子樹、右子樹是順序的,不能交換次序
  • 即使某個結點有一顆子樹,也要確定是左子樹還是右子樹

 

  • 二叉樹的五種基本形態
    • 空二叉樹
    • 只有一個根結點
    • 根節點只有左子樹
    • 根節點只有右子樹
    • 根節點只有左子樹和右子樹

斜樹

  • 左斜樹,所有結點都只有左子樹
  • 右斜樹,相反
    59df2c3acf5be40750000010

滿二叉樹

  • 一顆二叉樹的所有分支結點都有左右子樹,并且所有葉子結點都在最下面一層
  • 同樣深度二叉樹中,滿二叉樹結點最多
  • k為深度,則結點總數為2**k-1
  • 如下圖,深度為4的15個結點的滿二叉樹
    59df2d42cf5be40750000012

完全二叉樹Complete Binary Tree

  • 除了最后一層的所有的結點都集中在最左邊,其他層都是滿的
  • 完全二叉樹有滿二叉樹引出
  • 區別在于他們的最后一層,完全二叉樹最后一層的結點可以不滿

59df2efccf5be40750000013

59df2f1ccf5be40750000015


二叉樹的性質

59df2f4ecf5be40750000016

1.在二叉樹的第i層上最多有2**(i-1)個結點

2.深度為 k 的二叉樹,最多有 2**k-1 個結點

3.對任何一顆二叉樹,如果其終端結點數為n0,度數為2的結點數為n3,則有n0 = n2 + 1

  • 換句話說,就是葉子結點數 -1 就等于度數為2 的結點數
  • 證明
    59df38cacf5be40750000019

4.其他性質

  • 高度為k的二叉樹,至少有k個結點
  • 含有n個的結點的二叉樹的高度之多為n,最小為 math.ceil(log2 (n+1))

5.具有n個結點的完全二叉樹的深度為 int(log 2 n) + 1或者math.ceil(log2 (n+1))

6.如果有一顆n個結點的完全二叉樹,結點按照層序編號,如下圖
59df3bbccf5be4075000001a

  • 如果i = 1,則結點i是二叉樹的根
  • i > 1,雙親是int(i/2),這是向下取整
  • 雙親結點是 i, 左孩子結點就是 2i, 右孩子結點就是 2i+1
  • 2i > n,則結點 i 無左孩子,即結點i為葉子結點;否則其左孩子結點存在,編號為2i
  • 2i+1 > n,則結點 i 無右孩子;這里不能說明結點i沒有左孩子。否則其右孩子結點存在,編號為2i+1

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87842

(1)
nolannolan
上一篇 2017-10-16 13:47
下一篇 2017-10-16 19:20

相關推薦

  • linux 權限相關知識

    linux day 6     用戶、組和權限 1.Linux用戶:Username/UID         管理員:root, 0         普通用戶:1-65535             …

    Linux干貨 2016-08-08
  • file 命令

    文件類型:             – 普通文件             d 目錄文件   &nb…

    2017-07-23
  • 6個變態的C語言Hello World程序

    下面的六個程序片段主要完成這些事情: 輸出Hello, World 混亂C語言的源代碼 下面的所有程序都可以在GCC下編譯通過,只有最后一個需要動用C++的編譯器g++才能編程通過。 hello1.c   #define _________ }     #define …

    Linux干貨 2015-04-01
  • 硬鏈接與軟鏈接的聯系與區別

    硬鏈接與軟鏈接的聯系與區別     文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信息。元數據中的inode才是…

    Linux干貨 2016-10-20
  • shell編程之變量,數值計算,字符比較,文件測試小記

     變量     變量:能儲存計算結果或能表示值抽象概念,其指向的內存空間中一段地址。        變量賦值:name=value    溢出:字符超過定義內存中間大小    變量類型:數據類型,存儲的格式,參與的運算   &nb…

    Linux干貨 2016-08-15
  • 文本處理工具-習題

    1 、找出ifconfig 命令結果中本機的所有IPv4地址 [root@centos7 ~]# ifconfig |head -2 |tail-1 |cut -dn -f2 |cut -d" " -f2 2 、查出分區空間使用率的最大百分比值 [root@centos7 ~]# df |cut -c44-46 |sort -n|tail…

    Linux干貨 2016-08-15
欧美性久久久久