日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-二叉树、完全二叉树、森林等(基础讲解)

發(fā)布時間:2025/3/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-二叉树、完全二叉树、森林等(基础讲解) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、基本術語:

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

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

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

深度:樹中結點的最大層數(shù)

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

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

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

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

森林:n棵互不相交的樹


2、二叉樹:

不同于樹,結點的度<=2,而且子樹有左右之分,如下圖:


編號規(guī)則為從左到右、從上到下,如下圖:


性質1:位于第i層的結點個數(shù)不大于2的i次方。

性質2:二叉樹的深度為n,二叉樹總的結點個數(shù)不大于2的n+1次方減去1。

性質3:葉子節(jié)點個數(shù) = 度為2的結點個數(shù) + 1


滿二叉樹:除了最底層的結點外,其余結點的度均為2,如下圖


完全二叉樹:
官方定義:若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數(shù)都達到最大個數(shù),第 h 層所有的結點都連續(xù)集中在最左邊,這就是完全二叉樹

(1)所有的葉結點都出現(xiàn)在第k層或k-l層(層次最大的兩層)
(2)對任一結點,如果其右子樹的最大層次為L,則其左子樹的最大層次為L或L+l。

一棵二叉樹至多只有最下面的兩層上的結點的度數(shù)可以小于2,并且最下層上的結點都集中在該層最左邊的若干位置上,則此二叉樹成為完全二叉樹,并且最下層上的結點都集中在該層最左邊的若干位置上,而在最后一層上,右邊的若干結點缺失的二叉樹,則此二叉樹成為完全二叉樹。


性質1:編號為i的結點的雙親編號為i/2,結果取整

性質2:編號為i的結點的左孩子編號為2i,右孩子編號為2i+1


性質3:完全二叉樹的結點總數(shù)為n,則該完全二叉樹的高為log以2為底求n的對數(shù),結果取整


二叉樹的實現(xiàn):

順序存儲:

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


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



鏈式存儲:

結點包含3個值:數(shù)據(jù)域、指向左子樹的指針、指向右子樹的指針



二叉樹的遍歷:

先根遍歷:DLR 首先訪問根結點然后遍歷左子樹,最后遍歷右子樹。在遍歷左、右子樹時,仍然先訪問根結點,然后遍歷左子樹,最后遍歷右子樹。

中根遍歷:LDR 首先遍歷左子樹然后訪問根結點,最后遍歷右子樹。在遍歷左、右子樹時,仍然先遍歷左子樹,然后訪問根結點,最后遍歷右子樹。

后根遍歷:LRD 首先遍歷左子樹然后遍歷右子樹,最后訪問根結點。在遍歷左、右子樹時,仍然先遍歷左子樹,然后遍歷右子樹,最后訪問根結點。




樹如何轉換成二叉樹?

步驟1:僅保留最左邊孩子與根節(jié)點的連線,并連接兄弟結點。如下圖,B是A最左邊的孩子,所以保留A與B的連線,斷開A與C,A與D的連線。B、C、D是兄弟,所以將BCD連接起來。對于以B、C、D為根的子樹仍然按照這樣的規(guī)則轉換。

步驟2:左子樹順時針旋轉45度,便得到了轉換后的二叉樹



二叉樹如何轉換成樹?

步驟1:與樹轉換成二叉樹的步驟相反,左子樹逆時針旋轉45度

步驟2:斷開兄弟之間的連線,連接雙親。



森林如何轉換成二叉樹?

步驟1:每棵樹都先轉換為二叉樹

步驟2:以第一棵樹的根結點為根結點,將根結點依次連接起來

步驟3:按照根結點順時針旋轉45度



二叉樹如何轉換成森林?

步驟1:斷開根結點與右子樹的連線,對于右子樹仍然按照規(guī)定斷開與右子樹的連線。這樣得到多個二叉樹

步驟2:將每棵二叉樹轉換為樹

總結

以上是生活随笔為你收集整理的数据结构-二叉树、完全二叉树、森林等(基础讲解)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。