序:一個文件夾下面有很多層的小文件,如何算出這個文件夾下面有多少文件?遞歸遍歷,簡單暴力,遞歸在一般情況確實是比較方便的解決方案,但是當文件夾深度多深,遞歸的反復調用會導致方法一直無法釋放,造成jvm的棧溢出。那我們該怎么辦?

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

新浪微博:intsmaze劉洋洋哥

微信:intsmaze

平面設計培訓,網(wǎng)頁設計培訓,美工培訓,游戲開發(fā),動畫培訓

  說實話這個問題我以前也沒有遇到過,我是聽一位我很敬佩的IT前輩講的他曾經(jīng)的面試經(jīng)歷。他說他當時比較緊張就想到了遞歸,沒有想到其他的方案。

  當然他跟我說這個問題的時候,它也沒有想到好的處理方案。它認為這種情況可以參考網(wǎng)絡爬蟲的遞歸,為了防止爬蟲在一個深度出不來,通常會設置每一次爬的深度,然后通過各種的限制條件來保證每一個文件都被訪問到。

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

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

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

  

代碼思路:

網(wǎng)友評論