DS部落格作業05 樹

2022-05-19 23:29:14 字數 1709 閱讀 4663

相對於之前的棧和佇列,樹的學習難度明顯. 相較於之前的線性結構, 樹更多的需要應用遞迴思維. 迴圈結構用多了之後, 對於轉變到遞迴難以適應, 考慮問題的方式也改變了

樹表示資料表素之間一對多的關係,可以分為二叉樹(完全二叉樹、滿二叉樹、平衡二叉樹、排序二叉樹),紅黑樹,哈夫曼樹等等,遍歷的順序也有很多種:中序遍歷,

先序遍歷、後序遍歷、層次遍歷等等(每一種我們都要掌握),分類較多,應用的範圍也很廣.

由題目中序輸出可知,先左子樹,再根,在右子樹

if t!=null //樹不為空

遞迴遍歷左子樹

if 右子樹==null 且左子樹!=null 或者 左子樹==null且右子樹!=null

輸出

if的判斷條件出錯

int height(int num1,int num2,int lenth,int h)

if lenth == 0

返回 h-1;

int len = 0;

while(1)

應用遞迴演算法

int h1 = height(num1+1,num2,len,h+1); 返回左子樹最大高度

int h2 = height(num1+len+1,num2+len+1,lenth-1-len,h+1); 返回右子樹最大高度

返回高度

if n不為0

後序遍歷的最後乙個元素為根

for i=0 to n

if b[i]=根 then m=i為根在中序遍歷中的位置

輸出元素

遞迴呼叫本函式

作者解題思路:

先建立乙個佇列,用乙個標註變數去標註最開始時隊尾的位置,然後用乙個迴圈來操作二叉樹,迴圈體內的操作和層序遍歷類似,不同的是,在每趟迴圈結束後都要來判斷上一層是否便利完成(用那個標註變數和隊首的位置比較)如果便利完成,則重新整理最大寬度。

通過此題,加成了對於層次遍歷的做法,相對於前中後序遍歷來說,層次遍歷需要用佇列輔助實現,對於**的操作多了許多

DS部落格作業05 樹

通過這次對樹的學習,這是第一次學習非線性結構的資料結構,之前都是學線性的,感覺有點不習慣,做題之後 感覺線性和非線性的區別也就是遍歷的方法不一樣,以前線性結構遍歷都是用迴圈,到了非線性結構遍歷則都是 用遞迴。樹結構我覺得就分為兩種多叉樹和二叉樹,二叉樹結構體都是用左右孩子,而多叉樹結構體都是孩子和 ...

DS部落格作業05 樹

說明 由於在日常提交列表中除錯過程以及碰到的問題不太明顯,所以將上機考試中的困難點列出輸入一行中綴表示式,轉換一顆二叉表示式樹,並求解.建立二叉表示式樹 建立字元棧op 樹根棧tree op.push 遍歷 str i if 是數字 依次存入樹根棧內 if 是符號 判斷 str i 與 op棧頂的優...

DS部落格作業05 樹

感覺樹的內容很難,一些邏輯比較難弄懂,而且內容比較多,所以還是得花時間去理解,樹不比先前的那些線性結構,多了很多新東西,比如帶權路徑長度,哈弗曼編碼什麼的,總之要學起來真的不容易。觀察表示式樹會發現數字字元的左孩子右孩子都是空的用於後面的表示式樹的運算 建立兩個棧乙個是樹節點的儲存型別乙個是字元儲存...