非線性結構,每個元素可有多個前驅和后繼

樹是n(n>=0)個元素的集合,n=0時,稱為空樹,樹只有一個特殊的沒有前驅的元素,稱為樹的根root,樹中除了根結點外,其余元素只能有一個前驅,可以有零個和多個后繼,子樹也有自己的根

結點:樹中的數據元素

結點的度degree:結點擁有的子樹的數目稱為度,記作d(v)。樹的度是樹內各結點的度最大值

葉子結點:結點的度為零

分支結點:結點的度不為0

內部結點:除根結點外的分支結點,當然也不包括葉子結點

孩子結點:結點的子樹的根結點稱為該結點的孩子

雙親結點:一個結點是它各子樹的根結點的雙親

兄弟結點:具有相同雙親結點的結點

祖先結點:從根結點到該結點所經分支上所有的結點,A,B,D,都是G的祖先結點

樹

結點的層次(level):根結點為第一層,根的孩子結點為第二層,依次類推,記作l(v)

樹的深度(高度depth):樹的層次的最大值,上圖的樹深度為4

堂兄弟:雙親在同一層的結點

樹分為有序樹和無序樹,有序樹有順序,不能交換,無序樹沒有順序,不能發生交換

路徑:樹中的k個結點n1,n2…nk,滿足ni是n(i+1)的雙親,稱為n1到nk的一條路徑,就是一條線串下來,前一個都是后一個的(前驅)結點

路徑長度=路徑上的結點數-1,也是分支數

森林:m(m>=0)棵不相交的數的集合,對結點而言,其子樹的集合可就是森林

二叉樹

二叉樹:每個結點最多2棵子樹,有序樹,左右子樹不能交換次序,即使某個結點只有一棵樹,也要確定他是左子樹還是右子樹

左斜樹,所有結點都只有左子樹,右子樹,所有結點都只有右子樹

滿二叉樹

一棵二叉樹的所有分支結點都存在左子樹和右子樹,且所有葉子結點只存在最下面一層,同樣深度的二叉樹中,滿二叉樹結點最多,k為深度,則結點總數為2**k-1

完全二叉樹

若二叉樹的深度為k,二叉樹的層數從1到k-1層的結點數都達到了最大數,在第k層的所有結點都集中在最左邊,就是完全二叉樹,k為深度,則結點的最大值為2**k-1,當達到最大值的時候就是滿二叉樹

二叉樹性質

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

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

對任何一棵二叉樹T,如果其終端結點數為n0,度數為2的結點為n2,則有n0=n2+1,換句話說就是,葉子結點數-1=度數為2的結點數

高度為k的二叉樹,至少有k個結點

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

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

 

 

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

(0)
DrueDrue
上一篇 2018-04-16 10:21
下一篇 2018-04-16

相關推薦

  • functools模塊,偏函數partial、緩存LRU

    functools模塊,偏函數partial、緩存LRU

    2018-04-23
  • PYTHON類型注解

    PYTHON類型注解 函數定義的弊端 Python是動態語言,變量隨時可以被賦值,且能賦值為不同的類型 Python不是靜態編譯型語言,變量類型是在運行器決定的 動態語言很靈活,但是這種特性也是弊端 def add(x, y):return x + yprint(add(4, 5))print(add(‘hello’, ‘…

    Python筆記 2018-05-02
  • 函數執行過程和遞歸函數練習題

    函數執行過程和遞歸函數練習題

    2018-04-16
  • Python內置數據結構——字符串

    知識結構圖 學習筆記 字符串 字符組成的有序序列,字符的集合 使用單引號、雙引號、三引號引起來的字符序列 不可變對象 Unicode類型 定義 單引號、雙引號、三引號 r、R:引號內的字符原樣輸出 元素訪問 索引訪問 可迭代 join連接 “string“.join(iteratable) 使用string作為分隔符將可迭代對象連接起…

    2018-03-31
  • python內置數據結構

    python內置數據結構 sort(key=none,resverse=false)—>none 對列表元素進行排序,就地修改。默認升序 resvers為true,反轉,降序 key為一個函數,指定key如何排序 ls.sort(key=functionaame) Print(lst.sort(key=str,reverse=Ture) I…

    Python筆記 2018-03-31
欧美性久久久久