第04次作業 樹

2022-06-02 20:57:09 字數 2038 閱讀 4766

對樹結構的認識:樹的結構是一種非線性結構,資料元素之間是一對多的關係,解決關於樹的問題時可以用遞迴、棧、陣列、佇列。

遇到的困難:樹的操作不熟練,解決樹的問題可以運用遞迴、棧、陣列、佇列,解題方式多樣,難以運用自如。

樹結構可以解決的問題:哈夫曼編碼、家譜處理、表示式處理

構造樹

先序遍歷二叉樹,若樹不為空找到葉子結點(左右子樹均為空的結點)

帶權路徑長度和=每個葉子((結點深度-1)*權重)之和

建立表示式二叉樹:

依次判斷讀入字串的字元

若字元為運算元,建立結點併入運算元棧

若字元為運算子,判斷運算子棧棧頂運算子與該運算子優先順序

若該運算子優先順序高,該運算子入運算子棧

若該運算子優先順序低,運算子棧頂兩個符號出棧並建立結點入棧

運算子棧棧頂運算子與該運算子優先順序相同,棧頂運算子出棧

取出兩個運算元和乙個運算子出棧構造結點入棧

計算表示式樹:

若為葉子結點(左右子樹均為空),返回結點值

否則,取運算元和運算子進行計算

答案錯誤:除0錯誤

原因:計算表示式樹函式有返回值,遇到除數為0的情況

解決方法:將

case '/':if(right==0)

cout<

else return left/right;

}

改為

case '/':if(right==0)

return left/right;

}

定義a[n]存放長度,sum表示每次鋸木頭的費用,total表示總費用

將木塊長度存入陣列並按從小到大順序排序

for i=0 to n-2

sum=最小兩項和

total+=sum

將sum插入陣列,陣列保持從小到大順序

end for

輸出總費用

編譯錯誤:使用c++標頭檔案卻用c編譯器

1.5分

部落格作業04 樹

在本章樹的學習中,可以說是掌握得特別虛。因為二叉樹的很多操作中都應用到了遞迴,而在上學期學習遞迴的時候就沒有掌握好,很多時候樹的幾個遞迴 會讓我沉思很久才能屢清楚整個過程,然而看懂 和會寫 還是有很大差別的,本次的pta在課本上可以找到很多相關的 情況下還是完成得跌跌撞撞的,更不敢想象如果是沒有遇到...

部落格作業04 樹

遞迴遍歷左右子樹 if 左子樹高度大於右子樹高度 返回左子樹高度 1 否則 返回右子樹高度 1 當bt null,返回0,遞迴呼叫結束 利用函式建樹 樹的左孩子為該節點i的 2i 樹的右孩子為該節點i的 2i 1 左子樹遞迴 bt lchild createbtree str,2 i 右子樹遞迴 b...

部落格作業04 樹

對於樹的遞迴做法看著簡單,自己寫的話很難下手 樹的性質還沒有記牢 運用樹來解題還是有困難,要多加學習 當陣列不空時 判斷是否為運算子不是則 建立新的節點,將此時的字元賦給節點,並將節點入棧 是則判斷該字元與棧頂字元的優先順序 大於則將其入棧 等於將棧頂元素出棧 小於則將棧頂元素賦予根節點,並將棧的接...