部落格作業04 樹

2022-05-19 23:34:11 字數 2164 閱讀 2060

對於樹的遞迴做法看著簡單,自己寫的話很難下手

樹的性質還沒有記牢

運用樹來解題還是有困難,要多加學習

當陣列不空時

判斷是否為運算子不是則

建立新的節點,將此時的字元賦給節點,並將節點入棧

是則判斷該字元與棧頂字元的優先順序

大於則將其入棧

等於將棧頂元素出棧

小於則將棧頂元素賦予根節點,並將棧的接下來兩個元素賦給根節點的左右孩子,將根節點入樹棧

當棧不為空時

取棧頂元素為新建根節點值,,根節點的右孩子,左孩子依次取接下來的棧頂元素

將根節點入樹棧

將樹棧頂的根節點符給t

//計算表示式樹

將樹中的數字字元轉為數字

x儲存遞迴左子樹的值

y儲存遞迴右子樹的值

判斷運算子

+ 則 返回x+y

- 則 返回x-y

* 則 返回x*y

/ 則 當分母不為0 時再返回x/y

將所有**提交編譯錯誤,

*pre為先序序列,*in為中序序列

建立二叉樹節點b

for p=in to in+n

在中序序列中找等於*pre的節點位置k

確定根節點在中序序列中的位置k =p-in

遞迴構造左子樹每次返回先序序列進1,將中序節點分割開,b->lchild=createbtree(pre+1,in,k)

遞迴構造右子樹b->rchild=createbtree(pre+k+1,p+1 ,n-k-1)

遞迴法建立樹btree createbtree(string str,int i)

建立根節點bt

求字串長度len

當i大於len時返回null

如果根節點為#返回null

根節點值為str[i] ,

遞迴建立孩子節點,左孩子節點為2i ,右孩子節點為2i+1

bt->lchild =createbtree(str,2*i);

bt->rchild =createbtree(str,2*i+1);

//層次遍歷

如果根節點為空,返回null

不為空則將b進隊

當佇列不為空時

p= 隊頭元素,出隊

輸出p的值,

當左孩子不為空時

輸出左孩子值

當右孩子不為空是

輸出右孩子值

}

功能求二叉樹的最大寬度 , 利用陣列記錄下每一層的節點數,陣列的下標就為層數 , 方便記錄,索引

部落格作業04 樹

在本章樹的學習中,可以說是掌握得特別虛。因為二叉樹的很多操作中都應用到了遞迴,而在上學期學習遞迴的時候就沒有掌握好,很多時候樹的幾個遞迴 會讓我沉思很久才能屢清楚整個過程,然而看懂 和會寫 還是有很大差別的,本次的pta在課本上可以找到很多相關的 情況下還是完成得跌跌撞撞的,更不敢想象如果是沒有遇到...

部落格作業04 樹

遞迴遍歷左右子樹 if 左子樹高度大於右子樹高度 返回左子樹高度 1 否則 返回右子樹高度 1 當bt null,返回0,遞迴呼叫結束 利用函式建樹 樹的左孩子為該節點i的 2i 樹的右孩子為該節點i的 2i 1 左子樹遞迴 bt lchild createbtree str,2 i 右子樹遞迴 b...

部落格作業04 樹

void initexptree btree t,string str 建表示式的二叉樹 while op棧內還有運算子 t s棧頂元素 double evaluateextree btree t 計算表示式樹 編譯錯誤 答案錯誤 部分正確 btnode createbtree char pre,c...