定義的結構體中,name是用於存放文件名稱,string類型是字符串類型,定義了child孩子結點和brother兄弟結點。函數
main函數中主要實現的功能是打開文件而且把功能函數進行拼接(int number沒有實質性用處,能夠忽略掉)。首先就是對各類變量的定義了,定義文件名,指針,而且對指針進行動態內存分配。接下來打開文件,而且執行建樹和插入結點操做。而後輸出節點位置而且找出其對應的路徑。spa
CreatTree函數的功能主要是對main函數中讀出的文件名生成一棵數進行存儲,首先定義的是catalog和s1變量,s1變量就是對文件名進行讀取和存儲,是建樹操做的主要字符串定義,而catalog的功能就比較玄妙了,它的定義是防止保存完名稱以後s1消失,這個在後面調試遇到的問題裏面會提到。接下來的index變量是對文件名的讀取開關,也就是當循環變量1=index時進行讀取,讀取到「/"的出現時再中止讀取,此時爲了讀取下一個文件名,把指針後移,也就是index=i+1。因爲使用的遍歷方法是層次遍歷,因此讀完以後若是判斷brother爲NULL,那麼就移動至尾部,在讀完一層的時候須要把指針指向child也就是下一層。因爲最後一個文件的特殊性,沒有"/"做爲中止開關,因此定義了s2對最後一個文件名的讀取和存入,一樣的catalog用於防止s2消失。總的來講本函數的主要功能就是讀取文件名和建樹。設計
Insert函數的做用是把建好的數插入節點進去,首先進行判斷目錄名是否存在,若存在直接返回不須要插入,若不存在則進行遍歷插入,具體操做如圖所示。這個函數相對簡單一些,因此不進行太多的介紹。指針
Print函數用於輸出節點,使用的方法是遞歸法則,首先放置一個判斷是否到遞歸口,是則返回,不是則繼續遞歸遍歷,使用for循環進行輸出空格,使其具備每個層次,在輸出名稱,最後進行遞歸。這個函數的難度在於對空格多少以及遞歸和space變量的運用,space變量的做用在於判斷每一個名稱以前的空格須要多少。調試
最後一個函數是FindRoad找路徑函數,顧名思義就是找到main函數裏面輸入的文件x而且把它的路徑輸出,這個函數的判斷比較多,首先進行的兩個判斷,若bt->brother->name爲要查找名稱,則不輸出,由於須要查找的結點與bt->brother在同一層。接下來兩個判斷同上,運用的是遞歸,判斷的跟上面的兩個if是同樣的。這個函數剛開始思路錯誤了,以致於修改了有段時間後面又開始重寫,因此耽誤的比較長的時間,後面的刪除函數也沒寫下去。blog
因爲是大做業因此碰到的問題仍是蠻多的,首先是各個函數在單獨寫的時候,出現了不同的問題。先說說主函數吧,在實現主函數的時候,剛開始定義了不少的變量,應爲對函數中的遞歸不瞭解,因此用了for循環,可是後面在同窗的指導下,直接改爲打開文件,而後把相應的函數插進去,不須要再進行其餘的操做,也是方便了不少。而後就是Print函數了,這個函數當初設計的時候沒有注意到空格的輸出,致使層次關係看起來很混亂,以後在百度上查找了相應的代碼和分析,從新定義了一個space變量用於決定空格的多少。最後一個就是FindRoad函數了,這個函數在一開始設計的時候思路錯誤,致使整個樹的路徑都沒法被查找和找到,後面修改了一下,換了一個方向去寫, 直接用遞歸加上判讀來實現查找路徑,就方便了不少。遞歸
本次做業好的地方就是代碼的運行上,基本的功能都有實現,並且每一個函數對應的功能和思路都比較清晰,出現運行錯誤的地方也比較少,總體的實現方面和代碼量方面都是比較好的。不足的地方在於相對有些功能仍是能夠繼續去完善和修改,好比能夠增長一個刪除節點的函數,這個函數相對其餘函數會複雜的多。插入以後也能夠寫進去一個查看的片斷,查看插入以後的樹的結構。總之感謝組內的全部同窗的辛苦付出,也感謝老師對大做業的確定和點評。內存
1.main:林煒
2.CreatTree和Insert:陳梓燦 王鑫傑
3.Print:周秋斌 張偉龍
4.FindRoad:曾俊偉 周仁杰
貢獻度:主要貢獻者 陳梓燦
最後得分:暫時未知字符串