樹的遍歷與列印
樹的遍歷有三種方法,先、中、後序遍歷。這三種方法都是以子樹的根節點作為參照系的,比如先序的意思就是把先列印根節點,中、後序以此類推。遍歷演算法的核心思想是遞迴,這不是偶然的,本質上是因為樹結構的定義就是「遞
歸」的。
樹的定義:
1 樹是有限點的集合
2 有且只有乙個根節點
3 集合中其餘節點可以分為不相交的若干子集
4 每個子集也是一棵樹 叫做其根節點的子樹
那麼4就是樹的「遞迴」性了,4告訴我們對一顆樹進行的操作可以不加修改的作用於其子樹上,因為子樹本身也是一顆樹。從這個角度上講,因為線性表也可以用頭結點和子線性表的方式來定義,所以線性表的操作也可以用遞迴來實
除了上面三種遍歷方法之外,還有一種很自然的,使用者友好的遍歷,層序遍歷。層序遍歷顧名思義就是按樹的層次來遍歷,像印表機的工作方式那樣,逐行掃瞄,逐行列印。層序遍歷之所以說是使用者友好的,是因為層序遍歷可以列印
出「樹」樣的結果,像這樣:
10/ \
8 12
/ \ / \
6 9 11 13
或者更簡單一點:
108 12
6 9 11 13
樹的遍歷與列印二
先中後序遍歷遞迴的性質造成遍歷時總是 貪婪 的,肯定會一條路走到底,再回溯,而層序遍歷並不需要我們這樣,層序遍歷需要我們 走走停停 所以層序遍歷肯定不能遞迴實現,那如何實現呢?以上圖為例,遍歷10,8,12沒有問題,它們分別是root,root.left,root.right。然後我們希望列印6,9...
樹的建立與資料列印
標頭檔案 tree.h ifndef tree h define tree h define false 0 define true 1 typedef treenode typedef struct childnode 孩子結點型鍊錶 childnode typedef char treedata...
樹的遍歷 樹的遍歷(PTA)
給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。輸入第一行給出乙個正整數n 是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。在一行中輸出該樹的層序遍歷的序列。數字間以1個空格分隔,行首尾不得有多餘空格。7 2...