博客做業04--樹

#1.學習總結 ##1.1樹結構思惟導圖 ##1.2 樹結構學習體會算法

  • 總的來講,樹這章的內容比較多,先是介紹樹的概念,而後經過樹轉化成二叉樹,重點是對二叉樹的學習。
  • 二叉樹首先是學習二叉樹的創建,二叉樹創建有層次建樹,前中序建樹,後中序建樹;遍歷有層次遍歷,先序遍歷,中序遍歷,後序遍歷,而遍歷有遞歸和非遞歸兩種方式
  • 由於學習內容較多,加之假期的放鬆,致使對樹的掌握並非很好,只能利用課餘時間把沒能及時掌握的知識吃透。 #2.PTA實驗做業 ##題目1:求二叉樹高度 ###設計思路
求樹高度函數{
	若是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提交列表說明。 函數

  • 再編譯器上能夠運行可是答案錯誤,我先提交上去,得出不是答案錯誤,而是段錯誤,應該不是計算高度函數錯誤,因而我添加查看調試 發現前序的第一字符不是A,二是p?意識到字符數組輸入後有問題,仔細看,發現數組的輸入中數組第一個位置給設成1了,修改後即正確

##題目三: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

  • 155

#閱讀代碼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提交記錄截圖 遞歸

相關文章
相關標籤/搜索