DS博客做業05--樹

#1.本章學習總結 ##1思惟導圖 數組

##2.談談你對樹結構的認識及學習體會:安全

這一段時間學了樹(二叉樹),感受樹的內容很難,內容比較難弄懂,因此仍是得花時間去理解,總之要學起來真的不容易。在老師的課上跟着老師走對於樹概念和一些操做有了必定的理解(實際上理解透的卻沒有),本身下來實操代碼仍是對於我來講有點難不會作。樹有二叉樹,哈夫曼樹等等的特殊結構的樹,遍歷的方式也是多種多樣(中序遍歷,先序遍歷、後序遍歷、層次遍歷)。在樹這一章,由於要建樹遞歸的用法真的是太常見了因此是重中之重,遞歸方面的內容,只能硬背下來了。數據結構

#2.PTA實驗做業 ##2.1.題目1:函數

7-1 還原二叉樹 (25 分)學習

###2.1.1設計思路(僞代碼)設計

函數聲明:int Cnt(char *preorder, char *inorder, int n);
int main
{
    分別定義兩個字符型數組 preorder,inorder;
    int N;
    將題目的先序,中序字符串輸入;
    調用函數Cnt返回二叉樹高度的值
retur你0;
}
Cnt(char *preorder, char *inorder, int n)
{
    if二叉樹爲空就返回0;
   定義循環變量i,定義變a,b;

for (i=0至n)
若是先序數組的第一個元素與中序數組的第i個;
運用遞歸的思想逐個元素對應;
計算並返回樹的高度

###2.1.2代碼截圖3d

###2.1.3本題PTA提交列表說明code

A:編譯錯誤 B:一開始函數遞歸的方法錯了 B:返回的a,b值運算出錯blog

##2.2題目2:遞歸

7-3 jmu-ds-二叉樹層次遍歷 (25 分)

###2.2.1設計思路(僞代碼)

運用編譯更安全的csting類,和隊列容器
    定義樹的數據結構,節點數據data,左右孩子left,right;
    定義建樹函數和等級函數;
int main
{
    定義隊列que,變量i,wpl=0,字符型數組str;
    判斷樹組爲空,cout<<NULL;
    調用建樹和等級函數;
}

BinTree建樹
{
new 空間
        if(沒到數組尾而且左孩子爲#)
樹的葉子節點置爲 NULL;
        else 遞歸建樹
    if(沒到數組尾而且右孩子爲#)
樹的葉子節點置爲 NULL;
     else 遞歸建樹
}

LevelTraversal層次遍歷
{
int flag=0;
 BT入隊  while(隊不爲空)
    若是出隊分別對應樹的左右孩子,則入隊;
    由flag的變化控制格式輸出樹的沒一層節點數據
}

###2.2.2代碼截圖

###2.2.3本題PTA提交列表說明

A:部分正確緣由 B:一開始建樹沒有把左右孩子的空狀況考慮徹底 B:在層次遍歷時少了出隊要pop()

##2.3.題目3:

7-4 jmu-ds-二叉樹葉子結點帶權路徑長度和 (25 分)

###2.3.1設計思路(僞代碼)

運用編譯更安全的csting類
    定義樹的數據結構,節點數據data,左右孩子left,right和記錄等級變量level;
    定義建樹函數和wpl函數;
int main
{
    定義變量i,wpl=0,字符型數組str;
    判斷樹組爲空,cout<<NULL;
    調用建樹和wpl函數;
}

BinTree建樹
{
new 空間
    定義t=2*i(運用下標來找樹的層數)
cnt++來記錄

        if(沒到數組尾而且左孩子爲#)
樹的葉子節點置爲 NULL;
        else 遞歸建樹
    if(沒到數組尾而且右孩子爲#)
樹的葉子節點置爲 NULL;
     else 遞歸建樹
}

CntWPL算wpl函數
{
int result = 0;
 if (非left 和非right)
	result += 葉子節點數據字符轉換爲數據*bt(每一個節點的帶權值)
    	if (左孩子)
		result += CntWPL(bt->left);
        if (右孩子)
		result += CntWPL(bt->left);
    返回result;
}

###2.3.2代碼截圖

###2.3.3本題PTA提交列表說明

A:部分正確 B:樹的每一層記錄值多了1 B:沒有考慮到層次爲0,t的值的問題

##3.閱讀代碼

###3.1.題目:二叉樹的最低共同祖先

###3.2 解題思路

公共祖先結點必定在這兩條路徑上,且在最靠後的位
置,在對比倒着挨個查找就能獲得結果。咱們能夠用2個棧來保存這兩個結點的路徑,每當遇到一個結點,咱們就先將這個結點
先入棧,而後查看這個結點是不是
咱們最終要找的那兩個結點,若是是,則當前棧裏的結點順序就是咱們想要的路
徑,結束查找,若是不是,遞歸的去該結點的左子樹和右子樹裏查找,若是都沒
有找到,說明以該子樹沒有咱們想要的結點,天然它確定不在最終路徑上,將其
出棧便可

###3.3 代碼截圖

###3.4 學習體會 對於二叉樹,二叉樹的各個層和葉子節點,本題將二叉樹的節點順序化,這樣的好處就是祖先更加明確; 運用棧和隊列來輔助樹的操做可讓操做更加簡單

相關文章
相關標籤/搜索