對樹結構的認識:樹的結構是一種非線性結構,資料元素之間是一對多的關係,解決關於樹的問題時可以用遞迴、棧、陣列、佇列。
遇到的困難:樹的操作不熟練,解決樹的問題可以運用遞迴、棧、陣列、佇列,解題方式多樣,難以運用自如。
樹結構可以解決的問題:哈夫曼編碼、家譜處理、表示式處理
構造樹
先序遍歷二叉樹,若樹不為空找到葉子結點(左右子樹均為空的結點)
帶權路徑長度和=每個葉子((結點深度-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 樹
對於樹的遞迴做法看著簡單,自己寫的話很難下手 樹的性質還沒有記牢 運用樹來解題還是有困難,要多加學習 當陣列不空時 判斷是否為運算子不是則 建立新的節點,將此時的字元賦給節點,並將節點入棧 是則判斷該字元與棧頂字元的優先順序 大於則將其入棧 等於將棧頂元素出棧 小於則將棧頂元素賦予根節點,並將棧的接...