建op棧,將#進棧
建乙個樹棧tree
while(表示式未結束)
if(ch==運算元)生成乙個只有根節點的子樹並進棧
if(ch小於op棧頂運算子)
if(ch等於棧頂運算子) op出棧
if(ch大於棧頂運算子) ch進op棧
end while
while(op棧頂元素不等於#)
tree棧彈出兩個結點作為樹t的左右子樹
再把t放入tree棧
主要是在建立表示式樹的函式中應用建立簡易二叉樹的函式時將左右子樹弄反了= =
- 1、建立函式
如果n小於等於0 返回null
定義乙個字元x=根節點pr[0]
應用函式fine在in中尋找根節點x的位置並賦給k
遞迴構造左子樹,引數為pre+1,in,k
遞迴構造右子樹,引數為pre+1+k,in+1+k,n-k-1
- 2、求樹高度
如果樹為空 ,返回高度0
否則 遞迴求左子樹高度
遞迴求右子樹高度
返回左右子樹高度較高的一方並加1
遞迴構造右子樹的引數寫錯了
- 1、建立函式
如果n小於等於0 返回null
令r=後序序列最後乙個值即根結點值
b->data=r
遍歷中序序列找到根節點的位置並賦給k
遞迴構造左子樹,引數為post,in,k
遞迴構造右子樹,引數為post+k,p+1,n-k-1
- 2、先序遍歷
如果樹不為空
輸出結點值
遞迴先序遍歷左子樹
遞迴先序遍歷右子樹
一開始樹的結點值用的是字元表示,結果有錯誤,換成整數就好了
部落格作業04 樹
在本章樹的學習中,可以說是掌握得特別虛。因為二叉樹的很多操作中都應用到了遞迴,而在上學期學習遞迴的時候就沒有掌握好,很多時候樹的幾個遞迴 會讓我沉思很久才能屢清楚整個過程,然而看懂 和會寫 還是有很大差別的,本次的pta在課本上可以找到很多相關的 情況下還是完成得跌跌撞撞的,更不敢想象如果是沒有遇到...
部落格作業04 樹
遞迴遍歷左右子樹 if 左子樹高度大於右子樹高度 返回左子樹高度 1 否則 返回右子樹高度 1 當bt null,返回0,遞迴呼叫結束 利用函式建樹 樹的左孩子為該節點i的 2i 樹的右孩子為該節點i的 2i 1 左子樹遞迴 bt lchild createbtree str,2 i 右子樹遞迴 b...
部落格作業04 樹
對於樹的遞迴做法看著簡單,自己寫的話很難下手 樹的性質還沒有記牢 運用樹來解題還是有困難,要多加學習 當陣列不空時 判斷是否為運算子不是則 建立新的節點,將此時的字元賦給節點,並將節點入棧 是則判斷該字元與棧頂字元的優先順序 大於則將其入棧 等於將棧頂元素出棧 小於則將棧頂元素賦予根節點,並將棧的接...