樹就是非線性數據結構,相對於以前所學的全部知識來講,樹與二叉樹的難度要高於以前所學的知識。孩子樹,雙親樹,孩子兄弟樹,二叉樹,這些都是重點。 關於樹的學習,樹的基本術語,樹的性質,這些都是咱們須要去記得東西。尤爲是學習樹,還要懂得如何去畫樹,畫圖軟件也是咱們須要學習的。
6-4 jmu-ds-表達式樹 (25 分)
建棧 初始化:stacktree棧 while(表達式未結束) if(ch==操做數) 生成一個只有根結點的子樹T if(ch==運算符) while(ch<op棧頂運算符) 棧頂優先級高,則 建立一個樹結點T,數據爲op.top() stacktree彈出2個根結點T1,T2 T->lchild=T1,T->rchild=T2 stacktree.push(T) if(ch>op頂運算符) op.push(ch) if(ch==op頂運算符) 則op.pop() if(T不爲空) then if(左右子樹不爲空) then 返回對應數值 遞歸左右子樹獲得a,b switch(結點值) 對應符號計算 返回值 if(除數爲0) then 輸出錯誤 else a/b
Q1:在寫由於switch部分忽略了break致使部分正確
7-4 jmu-ds-二叉樹葉子結點帶權路徑長度和 (25 分)
首先定義結構體用於儲存二叉樹 BinTree CreateBTree(string str, int i, int h); 定義函數 wpl(BinTree T); 求和、 BinTree CreateBTree(string str, int i, int h) { if i < 0 且 i >= length do 返回 NULL; end if if str[i] == '#' 返回 NULL; end if 定義結構體變量 t,並賦予空間; 用來儲存二叉樹 返回 t; } int wpl(BinTree T) { if BT == NULL 返回 0; end if if BT->left == NULL 且 BT->right == NULL 返回 ((BT->data - '0')*BT->high); end if 返回 (wpl(BT->left) + wpl(BT->right)); }
Q1:在樹的創建上出現了錯誤
7-1 還原二叉樹
main 定義n ch a[MaxSize],b[MaxSize] ,T T=ReturnTree(a,b,N); 輸出 GetHight(T) BTree ReturnTree if(length==0) return NULL 創建T的節點空間 T->data=*b for(i=0;i!=length;i++) T->lchild=ReturnTree(a,b+1,i); T->rchild=ReturnTree(a+i+1,b+i+1,length-i-1); 返回T int GetHight 定義l, r; if(BT==NULL) 返回0 l=GetHight(BT->lchild); r=GetHight(BT->rchild); 返回結果 (l>r?l+1:r+1)
Q1:建樹的遞歸有一些問題,最開始直接運用T->lchild=CreatTree( s, 2 * i)這個,可是建的不對,最後借鑑了一下別人的方法,改正了一下
樹上機考試--網絡18 7-2 jmu-ds-輸出二叉樹每層節點
錯誤代碼
編程
二叉樹爲空的狀況漏考慮了,要考慮這個只要在剛開始入隊狀況下加上判斷隊列爲空的條件便可解決;關於樹的學習上,從遍歷最基礎的開始,樹的不少操做都要用到遞歸,而遞歸是一件讓人很頭疼的事,在遇到遞歸函數時,常常會出現混亂,