樹的遞歸定義:
樹是n(n>0)個結點的有限集,這個集合滿足下面條件:
⑴有且僅有一個結點沒有前驅(父親結點)。該結點稱爲樹的根。
⑵除根外,其餘的每一個結點都有且僅有一個前驅;
⑶除根外,每個結點都通過唯一的路徑連到根上(否則有環)。
節點的分類:
結點一般分成三類
⑴根結點:沒有父親的結點。在樹中有且僅有一個根結點。如節點R
⑵分支結點:除根結點外,有孩子的結點稱爲分支結點。如a,b,c,x,t,d,i
⑶葉結點:沒有孩子的結點稱爲樹葉。如w,h,e,f,s,m,o,n,j,u
度:
⑴結點的度:一個結點的子樹數目稱爲該結點的度。如結點i的度爲3。節點t的度爲2,節點b的度爲1。顯然,全部樹葉的度爲0。
⑵樹的度:全部結點中最大的度稱爲該樹的度(寬度)。上圖中的樹的度爲3。
深度:
樹是分層次的。結點所在的層次是從根算起的。根結點在第一層,根的兒子在第二層,其餘各層依次類推。即某個節點在第k層,則該節點的後件均在第k+1層。在樹中。父結點在同一層的全部結點構成兄弟關係。樹中最大的層次稱爲樹的深度。亦稱高度。上圖中樹的深度爲5。
樹的遍歷:
二叉樹的遍歷(traversing binary tree)是指從根結點出發,按照某種次序依次訪問二叉樹中所有的結點,使得每個結點被訪問依次且僅被訪問一次。下面介紹幾種遍歷及其規則:
前序遍歷:若樹爲空,則空操作返回。否則,先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹。
遍歷結果:ABDHIEJCFKG
中序遍歷:若樹爲空,則空操作返回。否則,從根節點開始(注意並不是先訪問根節點),中序遍歷根節點的左子樹,然後是訪問根節點,最後中序遍歷根節點的右子樹。
遍歷結果:HDIBEJAFKCG
後續遍歷:若樹爲空,則空操作返回。否則,從左到右先葉子後節點的方式遍歷訪問左右子樹,最後訪問根節點。
遍歷結果:HIDJEBKFGCA
層序遍歷:若樹爲空,則空操作返回。否則,從樹的第一層,也就是根節點開始訪問,從上到下逐層遍歷,在同一層中,按從左到右的順序結點逐個訪問。
遍歷結果:ABCDEFGHIJK