#1.本週學習總結 ##1.思惟導圖 ##2.談談你對樹結構的認識及學習體會算法
相對於以前的棧和隊列,樹的學習難度明顯. 相較於以前的線性結構, 樹更多的須要應用遞歸思惟. 循環結構用多了以後, 對於轉變到遞歸難以適應, 考慮問題的方式也改變了 樹表示數據表素之間一對多的關係,能夠分爲二叉樹(徹底二叉樹、滿二叉樹、平衡二叉樹、排序二叉樹),紅黑樹,哈夫曼樹等等,遍歷的順序也有不少種:中序遍歷, 先序遍歷、後序遍歷、層次遍歷等等(每一種咱們都要掌握),分類較多,應用的範圍也很廣.
#2.PTA實驗做業 ##2.1題目一:6-2 中序輸出度爲1的結點 ###2.1.1設計思路(僞代碼)函數
由題目中序輸出可知,先左子樹,再根,在右子樹 If T!=NULL //樹不爲空 遞歸遍歷左子樹 If 右子樹==NULL 且左子樹!=NULL 或者 左子樹==NULL且右子樹!=NULL 輸出
###2.1.2代碼截圖 ###2.1.3提交列表及說明 if的判斷條件出錯學習
##2.2題目二:7-1 還原二叉樹 ###2.2.1 設計思路設計
int Height(int num1,int num2,int lenth,int H) if lenth == 0 返回 H-1; int len = 0; while(1) { if Str2[num2+len] == Str1[num1] break; len++; } 應用遞歸算法 int h1 = Height(num1+1,num2,len,H+1); 返回左子樹最大高度 int h2 = Height(num1+len+1,num2+len+1,lenth-1-len,H+1); 返回右子樹最大高度 返回高度
###2.2.2代碼截圖 ###2.2.3本題PTA提交列表說明 3d
##2.3 題目3:7-2 根據後序和中序遍歷輸出先序遍歷 (25 分) ###2.3.1 代碼思路code
void preorder(int a[], int b[], int n) if n不爲0 後序遍歷的最後一個元素爲根 for i=0 to n if b[i]=根 then m=i爲根在中序遍歷中的位置 輸出元素 遞歸調用本函數
###2.3.2 代碼截圖 ###2.3.3 提交列表 #3.閱讀代碼 ##3.1 題目 計算一棵樹的寬度(並輸出每一層的寬度) ##3.2 解題思路blog
做者解題思路: 先建立一個隊列,用一個標註變量去標註最開始時隊尾的位置,而後用一個循環來操做二叉樹,循環體內的操做和層序遍歷相似,不一樣的是,在每趟循環結束後都要來判斷上一層是否便利完成(用那個標註變量和隊首的位置比較)若是便利完成,則刷新最大寬度。
##3.3 代碼截圖 排序
##3.4 學習體會 經過此題,加成了對於層次遍歷的作法,相對於前中後序遍從來說,層次遍歷須要用隊列輔助實現,對於代碼的操做多了許多遞歸