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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

先序中序数组推后序数组

發布時間:2023/12/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 先序中序数组推后序数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二叉樹遍歷

所謂遍歷(Traversal)是指沿著某條搜索路線,依次對樹中每個結點均做一次且僅做一次訪問。訪問結點所做的操作依賴于具體的應用問 題。 遍歷是二叉樹上最重要的運算之一,是二叉樹上進行其它運算之基礎。

?

從二叉樹的遞歸定義可知,一棵非空的二叉樹由根結點及左、右子樹這三個基本部分組成。因此,在任一給定結點上,可以按某種次序執行三個操作:

⑴訪問結點本身(N),

⑵遍歷該結點的左子樹(L),

⑶遍歷該結點的右子樹(R)。

以上三種操作有六種執行次序:

NLR、LNR、LRN、NRL、RNL、RLN。

注意:

前三種次序與后三種次序對稱,故只討論先左后右的前三種次序。

遍歷命名

根據訪問結點操作發生位置命名:

① NLR:前序遍歷(Preorder Traversal 亦稱(先序遍歷))

——訪問根結點的操作發生在遍歷其左右子樹之前。

② LNR:中序遍歷(Inorder Traversal)

——訪問根結點的操作發生在遍歷其左右子樹之中(間)。

③ LRN:后序遍歷(Postorder Traversal)

——訪問根結點的操作發生在遍歷其左右子樹之后。

注意:

由于被訪問的結點必是某子樹的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解釋為根、根的左子樹和根的右子樹。NLR、LNR和LRN分別又稱為先根遍歷、中根遍歷和后根遍歷。

?

給出某棵樹的先序遍歷結果和中序遍歷結果(無重復值),求后序遍歷結果。

比如

先序序列為:1,2,4,5,3,6,7,8,9

中序序列為:4,2,5,1,6,3,7,9,8

方法1:我們可以重建整棵樹:

https://blog.csdn.net/hebtu666/article/details/84322113

建議好好看這個網址,對理解這個方法有幫助。

?

如圖

然后后序遍歷得出后序序列。

?

方法2:我們可以不用重建,直接得出:

過程:

1)根據當前先序數組,設置后序數組最右邊的值

2)劃分出左子樹的先序、中序數組和右子樹的先序、中序數組

3)對右子樹重復同樣的過程

4)對左子樹重復同樣的過程

?

原因:我們的后序遍歷是左右中的,也就是先左子樹,再右子樹,再根

舉個例子:

比如這是待填充序列:

我們確定了根,并且根據根和中序序列劃分出了左右子樹,黃色部分為左子樹:

先處理右子樹(其實左右中反過來就是中右左,順著填就好了):

我們又確定了右子樹的右子樹為黑色區域,然后接著填右子樹的右子樹的根(N)即可。

?

?

舉例說明:

a[]先序序列為:1,2,4,5,3,6,7,8,9

b[]中序序列為:4,2,5,1,6,3,7,9,8

c[]后序序列為:0,0,0,0,0,0,0,0,0(0代表未確定)

我們根據先序序列,知道根一定是1,所以后序序列:0,0,0,0,0,0,0,0,1

從b[]中找到1,并劃分數組:

? ? ? ? ? 左子樹的先序:2,4,5,

? ? ? ? ? 中序:4,2,5

? ? ? ? ? 右子樹的先序:3,6,7,8,9,

? ? ? ? ? 中序:6,3,7,9,8

?

我們繼續對右子樹重復相同的過程:

(圖示為當前操作的樹,我們是不知道這棵樹的樣子的,我是為了方便敘述,圖片表達一下當前處理的位置)

當前樹的根一定為先序序列的第一個元素,3,所以我們知道后序序列:0,0,0,0,0,0,0,3,1

我們繼續對左右子樹進行劃分,中序序列為6,3,7,9,8,我們在序列中找到2,并劃分為左右子樹:

左子樹:

先序序列:6

中序序列:6

右子樹:

先序序列:7,8,9

中序序列:7,9,8

我們繼續對右子樹重復相同的過程,也就是如圖所示的這棵樹:

現在我們的后序序列為0,0,0,0,0,0,0,3,1

這時我們繼續取當前的根(先序第一個元素)放在下一個后序位置:0,0,0,0,0,0,7,3,1

劃分左右子樹:

左子樹:空,也就是它

右子樹:先序8,9,中序9,8,也就是這個樹

我們繼續處理右子樹:先序序列為8,9,所以根為8,我們繼續填后序數組0,0,0,0,0,8,7,3,1

然后劃分左右子樹:

左子樹:先序:9,中序:9

右子樹:空

對于左子樹,一樣,我們取頭填后序數組0,0,0,0,9,8,7,3,1,然后發現左右子樹都為空.

我們就把這個小框框處理完了

然后這棵樹的右子樹就處理完了,處理左子樹,發現為空。這棵樹也處理完了。

這一堆就完了。我們處理以3為根的二叉樹的左子樹。繼續填后序數組:

0,0,0,6,9,8,7,3,1

整棵樹的右子樹處理完了,左子樹同樣重復這個過程。

最后4,5,2,6,9,8,7,3,1

?

好累啊。。。。。。挺簡單個事寫了這么多。

回憶一下過程:

1)根據當前先序數組,設置后序數組最右邊的值

2)劃分出左子樹的先序、中序數組和右子樹的先序、中序數組

3)對右子樹重復同樣的過程

4)對左子樹重復同樣的過程

就這么簡單

?

先填右子樹是為了數組連續填充,容易理解,先處理左子樹也可以。

最后放上代碼吧

a=[1,2,4,5,3,6,7,8,9] b=[4,2,5,1,6,3,7,9,8] l=[0,0,0,0,0,0,0,0,0]def f(pre,tin,x,y):#x,y為樹在后序數組中對應的范圍if pre==[]:returnl[y]=pre[0]#根pos=tin.index(pre[0])#左子樹元素個數f(pre[pos+1:],tin[pos+1:],x+pos,y-1)#處理右子樹f(pre[1:pos+1],tin[:pos],x,x+pos-1)#處理左子樹f(a,b,0,len(l)-1) print(l)

?

總結

以上是生活随笔為你收集整理的先序中序数组推后序数组的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 免费看一级视频 | 91国模少妇一区二区三区 | 黄色xxx| 欧美亚洲福利 | 中文字幕第一页在线视频 | www.国产一区二区 | 波多野结衣乳巨码无在线 | 久操免费在线 | 超污视频网站 | 人妻一区二区视频 | 中文字幕在线观看网站 | 一起操在线 | 成人毛片18女人 | 久久久久久久久久久91 | 激情网婷婷 | 99干99| av导航网址 | 99久久精品国产一区二区成人 | 成人久久在线 | 夜夜嗨av一区二区三区四区 | 欧洲视频一区二区三区 | 色欲AV无码精品一区二区久久 | 免费看黄色的网址 | 午夜插插 | 制服丝袜在线看 | 国产精品宾馆在线精品酒店 | 日本三级网站在线观看 | 黄色性情网站 | 日本爽妇网 | 欧美人吸奶水吃奶水 | 潘金莲一级淫片aaaaaaa | 国产精品无码久久av | 亚洲欧洲日韩在线 | 国产免费av片在线 | 亚洲六月丁香色婷婷综合久久 | 翔田千里在线播放 | 亚州黄色 | 狠狠做深爱婷婷综合一区 | 国产在线视频一区 | 欧美日韩免费做爰视频 | 亚洲激情在线观看 | 国产日韩视频一区 | 欧美老女人性生活 | 日韩欧美中文字幕在线视频 | 日韩性大片| 一级免费观看 | 蜜臀在线观看 | 国产日韩在线视频 | 色综合91 | 91免费观看视频 | 成人一区二区av | 欧美精品免费在线观看 | 真实偷拍激情啪啪对白 | 手机看片一区二区 | 台湾佬美性中文网 | 中文字幕乱妇无码av在线 | 日韩伊人 | ,亚洲人成毛片在线播放 | wwwxxxx国产| 亚洲av电影一区二区 | 青青青草国产 | av丝袜在线 | 欧美成人黑人xx视频免费观看 | 久久免费视频精品 | 日本天天色 | 中文精品视频 | 天堂va蜜桃 | 黄色av小说在线观看 | 欧美性bbw | 久久久国产精品久久久 | 欧美精品一区二区三区三州 | 成人黄色片视频 | 国产精品一区二区三 | 日日日人人人 | 狠狠噜噜 | 8050午夜二级 | 夜夜夜网 | 日本不卡视频在线播放 | 人妻无码中文久久久久专区 | 操老女人视频 | 国产精品69毛片高清亚洲 | 中文字幕亚洲乱码熟女一区二区 | 国产日韩精品电影 | 国产成人久久精品麻豆二区 | 欧美熟妇另类久久久久久不卡 | 一卡二卡久久 | 欧美一区二区三区在线观看视频 | 一区二区三区四区影院 | 先锋影音中文字幕 | 真人真事免费毛片 | 99国产精品99久久久久久 | 男女操操| 日韩欧美aaa | 99精品欧美 | 福利av在线| 天堂久久精品忘忧草 | 久操免费在线 | 国产精品免费视频一区 | 国产日韩欧美 |