建樹:
建立乙個存放符號的棧op,和存放根結點的棧root
往符號棧op中存入#
while(字串未遍歷完)
如果是數字
定義乙個根節點並初始化並且值為這個數字
將這個根節點入根節點棧root
否則while(op棧的棧頂優先順序大於此時遍歷的符號)
定義乙個根節點並初始化並且值為op棧頂元素
op棧頂元素出棧
root棧出棧兩個元素作為剛定義的根節點的左右孩子
入棧這個根節點
如果(op棧的棧頂優先順序小於此時遍歷的符號)
將這個符號入棧到op棧
否則op棧出棧
while(棧頂元素不為#即還有需要建立的結點)
定義乙個根節點並初始化並且值為op棧頂元素
op棧頂元素出棧
root棧出棧兩個元素作為剛定義的根節點的左右孩子
入棧這個根節點
根節點為此時root棧的棧頂
計算:(簡要說明)
非遞迴後序遍歷遇到數字入棧,遇到符號就出棧兩個元素計算然後將結果入棧
最後的棧頂元素為結果
1.遇到除數為0時,沒有中止程式而是return 導致錯誤
2.計算時棧定義成int型別的,應該定義成double型別
建樹成功後求wpl:
定義乙個靜態區域性變數wpl
如果bt不為null
如果bt為葉子節點
wpl=wpl+權重乘與高度減1
遞迴(bt的左孩子,高度加1)
遞迴(bt的右孩子,高度加1)
否則 返回wpl
題目中空孩子的孩子也要用#輸入表示孩子為空,在建樹的時候沒考慮到導致錯誤
定義乙個pre陣列表示根的陣列並初始化
輸入俱樂部的個數n和學生人數m
for i=1 to m
輸入此俱樂部的人數number
定義乙個 a陣列長度為俱樂部人數加一
for j=1 to number
輸入a[i]
for j=2 to number
將a[j-1]的根節點設為a[j]
for i=1 to n
尋找根節點相同的人並統計人數
如果人數大於max max=人數
輸出max
一開始對這種陣列的並查集不會用,不明白根節點的意義,寫著寫著才會。
}
功能:pta家譜處理的建樹。
一開始做這道題我也想著用樹做的,但是由於不會用樹,只會一丟丟的二叉樹,所以最後用了偽並查集做,我覺得用樹還是比較優秀的。
這裡獲得沒有空格的子串還是比較巧妙的,運用了字串的函式,數出空格個數再獲得子串。
這是吳軍霖同學的**,詳情請見 吳俊霖的pintia.cn
部落格作業04 樹
在本章樹的學習中,可以說是掌握得特別虛。因為二叉樹的很多操作中都應用到了遞迴,而在上學期學習遞迴的時候就沒有掌握好,很多時候樹的幾個遞迴 會讓我沉思很久才能屢清楚整個過程,然而看懂 和會寫 還是有很大差別的,本次的pta在課本上可以找到很多相關的 情況下還是完成得跌跌撞撞的,更不敢想象如果是沒有遇到...
部落格作業04 樹
遞迴遍歷左右子樹 if 左子樹高度大於右子樹高度 返回左子樹高度 1 否則 返回右子樹高度 1 當bt null,返回0,遞迴呼叫結束 利用函式建樹 樹的左孩子為該節點i的 2i 樹的右孩子為該節點i的 2i 1 左子樹遞迴 bt lchild createbtree str,2 i 右子樹遞迴 b...
部落格作業04 樹
對於樹的遞迴做法看著簡單,自己寫的話很難下手 樹的性質還沒有記牢 運用樹來解題還是有困難,要多加學習 當陣列不空時 判斷是否為運算子不是則 建立新的節點,將此時的字元賦給節點,並將節點入棧 是則判斷該字元與棧頂字元的優先順序 大於則將其入棧 等於將棧頂元素出棧 小於則將棧頂元素賦予根節點,並將棧的接...