python 树_Python树的概念
1、定義
1)非線性結(jié)構(gòu),每個元素可以有多個前驅(qū)和后繼。
2)樹是n(n>=0)個元素的集合。
n=0時,稱為空樹。
樹只有一個特殊的沒有前驅(qū)的元素,稱為樹的根root。
樹中除了根節(jié)點外,其余元素只能有一個前驅(qū),可以有零個或者多個后繼。
2、遞歸定義
樹T是n(n>=0)個元素的集合,n=0時,稱為空樹。
有且只有一個特殊元素根,剩余元素都可以被劃分為m個互不相交的集合T1、T2、T3、.....、Tm,而每個元素都是樹,稱為T的子樹。
子樹也有自己的根。
3、樹的概念
結(jié)點:樹中的數(shù)據(jù)元素。
結(jié)點的度degree:結(jié)點擁有子樹的樹木稱為度。記作d(v)。
葉子結(jié)點:結(jié)點度為0,稱為葉子結(jié)點leaf、終端結(jié)點、末端結(jié)點。
分支結(jié)點::結(jié)點的度不為0,稱為非終端結(jié)點或分支結(jié)點。
分支:結(jié)點之間的關(guān)系
內(nèi)部結(jié)點:除了根結(jié)點外的分支結(jié)點,不包括子結(jié)點。
樹的度是樹內(nèi)各結(jié)點的度的最大值。D的結(jié)點度最大為3,樹的度數(shù)就是3.
孩子結(jié)點:結(jié)點的子樹的根結(jié)點成為該結(jié)點的孩子。
雙親結(jié)點:一個結(jié)點是它各子樹的根結(jié)點的雙親。
兄弟結(jié)點:具有相同雙親結(jié)點的結(jié)點:
祖先結(jié)點:祖先結(jié)點:從根結(jié)點到該結(jié)點所經(jīng)分支上所有的結(jié)點。A、B、D都是G的祖先結(jié)點。
子孫結(jié)點:結(jié)點的所有子樹上的結(jié)點都是該結(jié)點的子孫》B的子孫是DGHI
結(jié)點的層次:根結(jié)點為第一層,根的孩子為第二層,依次類推,記作L(v)
樹的深度(高度Depth):樹的層次的最大值,上圖的樹深度為4
堂兄弟:雙親的同一層的結(jié)點
有序樹:結(jié)點的子樹是有順序的(兄弟有大小,有先后次序),不能交換。
無序樹:結(jié)點的子樹是有無序的,可以交換。
路徑:樹中的k個結(jié)點n1、n2、....、nk。滿足ni是n(i+1)的雙親,成為你到nk的一條路徑。就是一條線串下來的,前一個都是后一個的父(前驅(qū))結(jié)點。? 路徑就是一串從上到下:a到g。
路徑長度=路徑上的結(jié)點樹-1,也是分支樹。長度就是-1.
森林:m(m》=0)棵不相交的樹的集合,對于結(jié)點而言,其樹的集合就是森林。A的結(jié)點的2棵子樹的集合就是森林。
4、樹的特點
唯一的根
子樹不相交
除了根以外。每個元素只能有一個前驅(qū),可以有零個或者多個后繼。
根結(jié)點就沒有雙親結(jié)點(前驅(qū)),葉子結(jié)點沒有孩子結(jié)點(后繼)
Vi是vj的雙親,則L(vi)=L(vi)-1,也就是雙親比孩子結(jié)點的層次小1.
堂兄弟的雙親不一定是兄弟關(guān)系。
5、二叉樹
1)每個結(jié)點最多兩棵子樹。(二叉樹不存在度數(shù)大于2的結(jié)點)
是有序樹,左子樹,右子樹是順序的,不能交換次序。
即使某個結(jié)點只有一個結(jié)點,也要確定其為左子樹還是右子樹。
2)二叉樹的五種基本形態(tài)。
空二叉樹
只有一個根結(jié)點
根結(jié)點只有左子樹
根結(jié)點只有右子樹
根結(jié)點左右都有子樹。
3)斜樹:
左斜樹,所有結(jié)點都在左結(jié)點。
右斜樹,所有結(jié)點都在右結(jié)點。
4)滿二叉樹
一顆二叉樹的所有分支結(jié)點都存在左子樹和右子樹,并且所有葉子結(jié)點只是存在最下面一層。
K為深度 ,結(jié)點總數(shù)為(2**k)-1
5)???? 完全二叉樹:(滿二叉樹是完全二叉樹,但是完全二叉樹不一定是滿二叉樹。)
若二叉樹的深度為k,二叉樹的層數(shù)從1到k-1層的結(jié)點樹都達到了最大數(shù),在第k層的所有的結(jié)點都集中在左邊,這就是完全二叉樹.
完全二叉樹由滿二叉樹引出.
K為深度(1<=k<=n\),則結(jié)點總數(shù)的最大值為2**k-1,當達到最大值的時候就是滿二叉樹.
6)二叉樹的性質(zhì):
性質(zhì)1:在二叉樹的第i層上至多有2^i -1個結(jié)點(i》=1) #例如第二層有兩個結(jié)點.
性質(zhì)2:深度為k的二叉樹,至多有2**k-1個結(jié)點,一層:2-1?? 二層 4-1=1+2+3? 三層8-1=1+2+4=7
性質(zhì)3:對任何一顆二叉樹T,如果其終端結(jié)點樹為n0,度數(shù)為2的結(jié)點為n2,則有n0=n2+1(就是葉子樹結(jié)點的樹-1就等于度數(shù)為2的結(jié)點樹.
證明:總結(jié)點數(shù)n=n1+n2+n3.
一棵樹的分支數(shù)為n-1,因為除了根結(jié)點外。其余結(jié)點都有一個分支,n0+n1+n2-1.
分支數(shù)還等于n0*0+n1*1+n2*2,n2是2分支結(jié)點所以乘以2,2*n2+n1.
可得2*n2+n1=n0+n1+n2-1=>n2=n0-1
其它性質(zhì):
高度為k的二叉樹,至少有k個結(jié)點
含有n(n>=1)的結(jié)點的二叉樹高度至多為n。
含有n(n>=1)的結(jié)點樹的二叉樹的高度至多為n,最小為math.ceil(log2(n+1)),不小于對數(shù)值的最小整數(shù), 向上取整。層次樹是取整.
如果是8個結(jié)點,向上取整為4,為4層.
性質(zhì)4:具有n個結(jié)點的完全二叉樹的深度為int(log.n)+1或者math.ceil(log2(n+1))
性質(zhì)5:如果有一顆n個結(jié)點的完全二叉樹(深度為性質(zhì)4),結(jié)點按照層序編號.
如果i=1,則結(jié)點i是二叉樹的根,無雙親,如果i>1,則雙親是int(i/2),向下取整。就是子結(jié)點的編號整除2得到的就是父結(jié)點的編號,父結(jié)點如果是i,那么左孩子的結(jié)點就是2i,右結(jié)點是2i+1.
如果2i》n,則結(jié)點i無左孩子,即結(jié)點為葉子結(jié)點,否則其左孩子結(jié)點存在編號為2i
如果2i+1》n,則結(jié)點i無右孩子,不能說明結(jié)點i沒有左孩子,否則右孩子的結(jié)點存在編號為2i+1.
總結(jié)
以上是生活随笔為你收集整理的python 树_Python树的概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python turtle怎么用变量_P
- 下一篇: python decode hex_在p