序:一個(gè)文件夾下面有很多層的小文件,如何算出這個(gè)文件夾下面有多少文件?遞歸遍歷,簡(jiǎn)單暴力,遞歸在一般情況確實(shí)是比較方便的解決方案,但是當(dāng)文件夾深度多深,遞歸的反復(fù)調(diào)用會(huì)導(dǎo)致方法一直無(wú)法釋放,造成jvm的棧溢出。那我們?cè)撛趺崔k?

原文和作者一起討論:http://www.cnblogs.com/intsmaze/p/6031894.html

新浪微博:intsmaze劉洋洋哥

微信:intsmaze

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開(kāi)發(fā),動(dòng)畫培訓(xùn)

  說(shuō)實(shí)話這個(gè)問(wèn)題我以前也沒(méi)有遇到過(guò),我是聽(tīng)一位我很敬佩的IT前輩講的他曾經(jīng)的面試經(jīng)歷。他說(shuō)他當(dāng)時(shí)比較緊張就想到了遞歸,沒(méi)有想到其他的方案。

  當(dāng)然他跟我說(shuō)這個(gè)問(wèn)題的時(shí)候,它也沒(méi)有想到好的處理方案。它認(rèn)為這種情況可以參考網(wǎng)絡(luò)爬蟲的遞歸,為了防止爬蟲在一個(gè)深度出不來(lái),通常會(huì)設(shè)置每一次爬的深度,然后通過(guò)各種的限制條件來(lái)保證每一個(gè)文件都被訪問(wèn)到。

  當(dāng)時(shí)我靈光一閃,因?yàn)楫?dāng)時(shí)我在溫故數(shù)據(jù)結(jié)構(gòu)的知識(shí),我說(shuō)這個(gè)文件夾的層次看著好呀嘛好眼熟,不就相當(dāng)于一個(gè)樹的結(jié)構(gòu),那我們學(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候是如何遍歷節(jié)點(diǎn)的。有左遞歸,中遞歸,右遞歸,當(dāng)然這就是上面的遞歸方法,不是我們要找的解決方案,那么該怎么辦?

看,角落里有我們經(jīng)常忽視的層序遍歷。

  層序遍歷:層序遍歷就是從所在樹的根節(jié)點(diǎn)出發(fā),首先訪問(wèn)第一層的樹根節(jié)點(diǎn),然后從左到右訪問(wèn)第2層上的節(jié)點(diǎn),接著是第三層的節(jié)點(diǎn),以此類推,自上而下,自左至右逐層訪問(wèn)樹的結(jié)點(diǎn)的過(guò)程就是層序遍歷。

  

代碼思路:

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式