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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

邓公数据结构C++语言版学习笔记——二叉树

發(fā)布時間:2023/12/3 c/c++ 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 邓公数据结构C++语言版学习笔记——二叉树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

二叉樹的遍歷

一. preorder——先序遍歷VLR

1. 遞歸先序遍歷

2. 迭代先序遍歷


3.先序遍歷圖解

二. inorder——先序遍歷LVR

1. 遞歸中序遍歷

2.迭代中序遍歷

3.迭代中序遍歷優(yōu)化空間復(fù)雜度
<1>定義直接后繼

<2>借用直接后繼優(yōu)化算法
解釋
① backtrack相當(dāng)于將原輔助棧換成一個標(biāo)志位。
② 每當(dāng)?shù)诌_(dá)一個節(jié)點(diǎn),借助該標(biāo)志即可判斷此前是否剛做過一次自下而上的回溯。若不是,則按照中序遍歷的策略優(yōu)先遍歷左子樹。反之,若剛發(fā)生過一次回溯,則意味著當(dāng)前節(jié)點(diǎn)的左子樹已經(jīng)遍歷完畢(或等效地,左子樹為空),于是便可訪問當(dāng)前節(jié)點(diǎn),然后再深入其右子樹遍歷。
③ 每個節(jié)點(diǎn)被訪問之后,都應(yīng)轉(zhuǎn)向其在遍歷序列中的直接后繼。
④ 檢查右子樹是否為空判斷后繼位置:如果非空則后繼在右子樹,否則后繼為某一祖先(回溯)。

4.迭代中序遍歷進(jìn)一步優(yōu)化

5.中序遍歷圖解

三. postorder——后序遍歷LRV

1. 遞歸后序遍歷

2.迭代后序遍歷
將樹T畫在二維平面上,并假設(shè)所有節(jié)點(diǎn)和邊均不透明。于是從左側(cè)水平向右看去,未被遮擋的最高葉節(jié)點(diǎn)v——稱作最高左側(cè)可見葉節(jié)點(diǎn)(HLVFL)——即為后序遍歷首先訪問的節(jié)點(diǎn)
下面的代碼尋找最高左側(cè)可見葉節(jié)點(diǎn)


后序遍歷步驟:
① 訪問當(dāng)前節(jié)點(diǎn)。 ② 遍歷以其右兄弟(若存在)為根的子樹。③ 向上回溯至其
父節(jié)點(diǎn)(若存在)并轉(zhuǎn)入下一片段

3.后序遍歷圖解

四.levelorder——層次遍歷

1. 算法實(shí)現(xiàn)

2. 層次遍歷圖解

總結(jié)

二叉樹遍歷用到了棧(stack)和隊(duì)列(quene)這兩個數(shù)據(jù)結(jié)構(gòu)使得代碼優(yōu)化(從遞歸到迭代的空間優(yōu)化
這幾天看了二叉樹,感覺迷迷糊糊(差的還很遠(yuǎn)),暫且能把代碼看明白(讓我寫感覺差的太遠(yuǎn)了)而且已經(jīng)開學(xué)了只能抽時間看看這些東西,所以趕快把一些自己感覺有用的東西記下來方便以后復(fù)習(xí),同時也供大家一起學(xué)習(xí)(如果有錯誤麻煩指出來共同進(jìn)步)。以上代碼全是圖片(自己本來想這照著寫一遍,發(fā)現(xiàn)還是有點(diǎn)難度,所以先記下來以后抽空寫一下)圖片全部來源于鄧俊輝老師的《數(shù)據(jù)結(jié)構(gòu)C++語言版》

總結(jié)

以上是生活随笔為你收集整理的邓公数据结构C++语言版学习笔记——二叉树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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