一、基本術語:spa
度:有兩種度「結點的度」與「樹的度」。結點的度指的是一個結點子樹的個數;樹的度是指樹中結點度的最大值。二叉樹
葉子結點:指的是沒有子樹的結點。遍歷
層:樹是有層次的,通常根結點爲第0層。規定根結點到某結點的路徑長度爲該結點的層數。im
深度:樹中結點的最大層數img
兄弟:同一雙親的結點,互爲兄弟co
堂兄弟:雙親在同一層次的結點,互爲堂兄弟術語
祖先:從根結點到該結點的路徑上的全部結點都是該結點的祖先。底層
子孫:以某一結點爲根的子樹上的全部結點都是該結點的子孫
森林:n棵互不相交的樹
二、二叉樹:
不一樣於樹,結點的度<=2,並且子樹有左右之分,以下圖:
編號規則爲從左到右、從上到下
性質1:位於第i層的結點個數不大於2的i次方。
性質2:二叉樹的深度爲n,二叉樹總的結點個數不大於2的n+1次方減去1。
性質3:葉子節點個數 = 度爲2的結點個數 + 1
滿二叉樹:除了最底層的結點外,其他結點的度均爲2,以下圖
徹底二叉樹:不必定滿,若一個二叉樹有n個結點,他與滿二叉樹編號爲1-n的結點一一對應。這樣的二叉樹稱爲徹底二叉樹
性質1:編號爲i的結點的雙親編號爲i/2,結果取整
性質2:便哈爲i的結點的左孩子編號爲2i,右孩子編號爲2i+1
性質3:徹底二叉樹的結點總數爲n,則該徹底二叉樹的高爲log以2爲底求n的對數,結果取整
二叉樹的遍歷:
先根遍歷:DLR 首先訪問根結點而後遍歷左子樹,最後遍歷右子樹。在遍歷左、右子樹時,仍然先訪問根結點,而後遍歷左子樹,最後遍歷右子樹。
中根遍歷:LDR 首先遍歷左子樹而後訪問根結點,最後遍歷右子樹。在遍歷左、右子樹時,仍然先遍歷左子樹,而後訪問根結點,最後遍歷右子樹。
後根遍歷:LRD 首先遍歷左子樹而後遍歷右子樹,最後訪問根結點。在遍歷左、右子樹時,仍然先遍歷左子樹,而後遍歷右子樹,最後訪問根結點。
樹如何轉換成二叉樹?
步驟1:僅保留最左邊孩子與根節點的連線,並鏈接兄弟結點。以下圖,B是A最左邊的孩子,因此保留A與B的連線,斷開A與C,A與D的連線。B、C、D是兄弟,因此將BCD鏈接起來。對於以B、C、D爲根的子樹仍然按照這樣的規則轉換。
步驟2:左子樹順時針旋轉45度,便獲得了轉換後的二叉樹
二叉樹如何轉換成樹?
步驟1:與樹轉換成二叉樹的步驟相反,左子樹逆時針旋轉45度
步驟2:斷開兄弟之間的連線,鏈接雙親。
森林如何轉換成二叉樹?
步驟1:每棵樹都先轉換爲二叉樹
步驟2:以第一棵樹的根結點爲根結點,將根結點依次鏈接起來
步驟3:按照根結點順時針旋轉45度
二叉樹如何轉換成森林?
步驟1:斷開根結點與右子樹的連線,對於右子樹仍然按照規定斷開與右子樹的連線。這樣獲得多個二叉樹
步驟2:將每棵二叉樹轉換爲樹