DS博客做業05--樹

1.本週學習總結

1.1思惟導圖


1.2.談談你對樹結構的認識及學習體會

樹結構在實際應用中好像挺常見的,代碼的思路能夠整成樹,例如修理牧場的問題也能夠經過樹來解決問題
樹有多種儲存結構,雙親存儲,孩子鏈存儲,孩子兄弟存儲,能夠根據獲得的數據的特色來選擇合適的存儲結構
樹種常見的樹爲二叉樹,二叉樹的前中後遍歷分別能夠用於處理不一樣類型的問題
由二叉樹衍生出的線索二叉樹,根據線索二叉樹就能獲得它的先後都是什麼結點
哈夫曼樹是用來求得最優解,並查集樹能夠用來判斷是否屬於同一集合

2.PTA實驗做業

2.1.題目1:題目名稱

根據後序和中序遍歷輸出先序遍歷

2.1.1設計思路

根據輸入的中序序列和後序序列,先肯定它的根節點的位置,用mid儲存
BT->data=後序序列的最後一個元素
BT->lchild=遞歸調用建樹函數,參數爲後序序列的第一個元素,中序序列的第一個元素,次數爲mid次,及k次
BT->rchild=遞歸調用建樹函數,參數爲後序序列的第mid個元素,中序序列的第mid-1個元素,次數爲n-mid-1次,即n-k-1次

2.1.2代碼截圖

2.1.3提交列表說明

Q1:部分正確是由於把遞歸裏面序列從哪一個元素開始寫錯了,致使了三個測試點段錯誤
A1:後來從新看了一遍, 而後改了過來就對了

2.2 題目2

jmu-ds-輸出二叉樹每層節點

2.2.1設計思路

定義兩個樹的變量,一個爲curNdoe,另外一個爲lastNode
定義一個樹結構類型的隊列q
定義int類型變量flag=1,level=1
curNode=lastNode=BT
若是樹不空則將一個結點進隊
while 隊列不空
    取隊首賦給curNode
    若是curNode有左孩子則進隊
    若是有右孩子則進隊
    若是 flag爲1,輸出層數level
    if curNode=lastNode,即curNode爲下一層的最後一個元素
        將隊列裏的最後一個元素賦給lastNode(這樣就考科一繼續判斷下一層何時是最後一個元素)
        flag=1
        輸出curNode指向的data和回車
    else
        輸出curNode指向的data
        flag=0;
    出隊一個元素
end while

2.2.2代碼截圖


2.2.3提交列表說明

Q1:這題老師在上課時候已經給過思路了,可是那時的代碼的格式和pta裏要求的格式不同,而後本身在作的時候,在控制格式的時候和卡殼了樣,一直控制很差,而後次日從新打的時候,一會兒就想到了
A1:用一個flag就能夠解決,我以前想着要控制層數和換行要分開控制,才搞了好久
Q2:而後第二個問題,是經過測試數據發現錯在哪的,當左子樹的層數比右子樹的層數多就會出錯,由於這時右子樹的左右孩子都是空的,那麼lastNode就不會等於下面那層的最後邊的那個
A2:因而我有申請了一個tempNode,保存左邊的子樹,那麼lastNode就會指向那層的最後一個元素了
Q3:可是這樣作當只有一個根節點的時候,tempNode就會變成野指針
A3:在大佬的提點上,發現不用這麼麻煩,只須要讓lastNode等於對尾就能夠了,不須要判斷最後一個元素是在右子樹仍是左子樹上了

2.3 題目3

修理牧場

2.3.1設計思路

定義n和一個降序的優先隊列q
定義長度爲n的數組a,以及int型的變量 wpl=0
輸入n
輸入n個數,賦給數組a,以及進隊q
while 隊列的長度大於1
    定義min=取隊頂,出隊列
    定義pmin=取隊頂,出隊列
    將兩個值相加,再進隊
    wpl+=min+pmin
end while
輸出wpl

2.3.2代碼截圖

2.3.3提交列表說明

Q1:看到題目第一個想法就是用哈夫曼樹來處理,可是老師在上課講過,這題用哈夫曼會超時,能夠用容器優先隊列來作
A1:發現用優先隊列,進去的元素會自動排好,只要把前兩個相加,在把和放進去,繼續和裏面的數比較,將比較小的兩個數相加,就能夠解決這個問題了,比構建哈夫曼樹快多了
優先隊列升序堆:priority_queue<int> qmax;
優先隊列降序堆:priority_queue<int,vector<int>,greater<int> > qmin;

3 閱讀代碼

3.1 題目

給定一個二叉搜索樹,編寫一個函數 kthSmallest 來查找其中第 k 個最小的元素。
說明:
你能夠假設 k 老是有效的,1 ≤ k ≤ 二叉搜索樹元素個數。

3.2 解題思路

由於是二叉查找樹,因此節點比左孩子小,比右孩子大,
使用遞歸的方法進行中序遍歷,遍歷的過程當中將節點爲第K小的元素,輸出便可

3.3 代碼截圖

3.4 學習體會

這題利用了中序遍歷的特色,輕鬆的輸出了第K小的元素
獲得的學習體會是,能夠根據其特色,靈活的將他們運用在各類適用的問題上
相關文章
相關標籤/搜索