樹的遍歷與列印

2021-06-07 10:20:47 字數 597 閱讀 2929

樹的遍歷與列印

樹的遍歷有三種方法,先、中、後序遍歷。這三種方法都是以子樹的根節點作為參照系的,比如先序的意思就是把先列印根節點,中、後序以此類推。遍歷演算法的核心思想是遞迴,這不是偶然的,本質上是因為樹結構的定義就是「遞

歸」的。

樹的定義:

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...