資料結構---樹、二叉樹、森林

來源:互聯網
上載者:User

標籤:style   blog   http   color   strong   資料   2014   ar   

1、基本術語:

度:有兩種度“結點的度”與“樹的度”。結點的度指的是一個結點子樹的個數;樹的度是指樹中結點度的最大值。

葉子結點:指的是沒有子樹的結點

層:樹是有層次的,一般根結點為第0層。規定根結點到某結點的路徑長度為該結點的層數。

深度:樹中結點的最大層數

兄弟:同一雙親的結點,互為兄弟

堂兄弟:雙親在同一層次的結點,互為堂兄弟

祖先:從根結點到該結點的路徑上的所有結點都是該結點的祖先。

子孫:以某一結點為根的子樹上的所有結點都是該結點的子孫

森林:n棵互不相交的樹


2、二叉樹:

不同於樹,結點的度<=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的對數,結果取整


二叉樹的實現:

順序儲存:

對於完全二叉樹和滿二叉樹可以利用完全二叉樹的性質2來定位雙親和孩子的位置。如:


對於一般的二叉樹,採取補值的方法將二叉樹補成完全二叉樹,再利用完全二叉樹的順序儲存方式。



鏈式儲存:

結點包含3個值:資料域、指向左子樹的指標、指向右子樹的指標



二叉樹的遍曆:

先根遍曆: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:將每棵二叉樹轉換為樹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.