part類用map存有孩子的類和資訊(數量),用string存有自己的名字name,如下:
public
class
part
問題:通過成員函式count_howmany(part p)計算類物件擁有目標目標結點的數量
例如,howmany couch floor
howmany couch hospital
howmany couch couch
howmany small_rubber_washer floor
輸出:2201
//將初始值設為1
int amount_temp;
part pt =
newpart()
;if(this
.name.
equals
(p.name)
)iterator
it = subparts.
keyset()
.iterator()
;while
(it.
hasnext()
)return amount;
在樹結構中查詢想要的結點,首先想到的就是利用遞迴。設想把amount初始值設1,在遞迴時,把當前的value與下一層遞,amount遞迴相乘得到最終結果。但是經過debug發現,amount * pt.count_howmany(p)* subparts.get(pt)這個演算法,在第乙個分支中沒找到時,返回之前的amount值,讓函式回到前面的結點繼續尋找。
//刪除amount_temp
int amount=0;
part pt =
newpart()
;if(this
.name.
equals
(p.name)
)iterator
it = subparts.
keyset()
.iterator()
;while
(it.
hasnext()
)return amount;
通過做出以上改變,能在函式走到樹葉部分還沒找到匹配的結點時,返回amount=0,這樣,就能使上一層函式中pt.count_howmany§為零,amount值不變繼續在另乙個分支中查詢。
對於敲**依舊很菜的我而言,開始對最最最簡單的遞迴(比如斐波那契數列)都想了很久。不過最近在敲**時一步步debug過程中慢慢了解了樹的前,中,後序遍歷的遞迴實現。最後自己費了很長時間也算是寫出了一段像樣點的遞迴**展示在大家面前。我還在漫長的程式設計路上學習,如有任何缺陷,敬請大佬們指正呀!
資料結構學習筆記 遞迴
遞迴 乙個函式自己直接或間接呼叫自己。函式的呼叫 當在乙個函式的執行期間呼叫另乙個函式時,在執行被調函式之前,系統需要完成三間事 1 將所有的實際引數 返回位址 當被調函式完成後,接下來要執行的語句的位址 等資訊傳遞給被呼叫函式儲存。2 為被調函式的區域性變數 也包括形參 分配儲存空間。3 將控制轉...
資料結構學習筆記
資料結構概述 定義我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構 儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢摸個 元素,刪除某個元素,對所有元素進行排序 而執行的相應操作,這個相應 的操作也叫演算法 資料結構 個體 個體的關係 演算法 對儲存資料的操作 演算...
資料結構學習筆記
資料結構學習筆記 程式 資料結構 演算法 資料結構 資料 結構 結構的本質是關係 資料之間的關係從不通風層面上分為邏輯關係和物理關係 演算法的設計要依據資料的邏輯關係 演算法的實現要依據資料的物理關係 物理關係是邏輯關係的基礎和載體 演算法實現時需要先依據問題抽象出資料模型,即初步確定待處理資料的邏...