#1.學習總結 ##1.1樹結構思惟導圖 ##1.2 樹結構學習體會算法
求樹高度函數{ 若是BT==NULL 空樹返回0 //遞歸出口 不然{ 取BT->Left作函數參數求左子樹高度賦值給m 取BT->Right作函數參數求左子樹高度賦值給n 若是(m>n)返回m+1 不然返回n+1 } }
###代碼截圖 ###PTA提交列表說明。 數組
主函數{ 輸入兩個字符數組 初始化樹Tree 調用還原函數recover() 輸出 樹高度 } recover函數{ 若是樹空 返回NULL; 初始化樹bt 先序首個字符賦值給bt根節點 for i=0 to N{ 再中序中尋找先序首字符的位置 break; } 左子樹遞歸法建樹 右子樹遞歸法建樹 } 求高度函數{ 若是樹空 返回0; l=遞歸計算左子樹高度 r=遞歸計算右子樹高度 返回max[l,r] }
###代碼截圖 ###PTA提交列表說明。 函數
##題目三:jmu-ds-表達式樹 ###設計思路學習
建表達式樹函數{ 創建樹s棧和字符op棧 while(str[i]不爲0){ 若是不是操做符{ 新建節點T,數據域賦值str[i] 節點T進s棧 } 不然{ 判斷op棧頂字符與str[i]的優先級{ 小於:str[i]進棧 等於:處在棧頂字符 大於:把op的棧頂賦值給t的數據域,連續出棧s的兩個棧頂做爲t的左右孩子,在將T進s棧 } } } while(op棧頂不是#) { op棧頂元素賦值給T的數據域 出棧s的棧頂賦值給T的左孩子 若是(s不空) { 出棧s的棧頂賦值給T的右孩子 } T進s棧 T=s棧頂 } } 計算表達式樹函數{ 若是(左右子樹均不空){ 把T->data轉換成數字 } a,b分別用由T的左右子樹用遞歸法算出 判斷{ +:返回a+b -:返回a-b *:返回a*b /;{ 若是b<1:直接退出 不然返回:a/b } } }
###代碼截圖 ###PTA提交列表說明。 設計
#3.截圖本週題目集的PTA最後排名調試
##個人得分code
#閱讀代碼blog
樹的存儲結構以下: typedef int ElemType; typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; 複製一顆樹 bool CopyTreeIsOK(BiTree p){ if(CopyTree(p)==NULL) return false; return true; } BiTree CopyTree(BiTree p){ if(!p) return NULL; BiTree q=new BiTNode; q->data=p->data; q->lchild=CopyTree(p->lchild); q->rchild=CopyTree(p->rchild); return q; }
##5. 代碼Git提交記錄截圖 遞歸