部落格作業04 樹

2022-05-31 02:36:10 字數 2474 閱讀 3084

建樹:

建立乙個存放符號的棧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 樹

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