今天學習的是資料結構有關樹的遍歷的知識點。以下將會講到樹的幾種基本的的遍歷方式,以及通過例題來鞏固知識點。
二叉樹的遍歷是指通過一定順序訪問二叉樹的所有結點。
一般有四種方法:先序遍歷、中序遍歷、後序遍歷、層序遍歷。
前三種一般使用深度優先搜尋dfs實現,而層序遍歷一般使用廣度優先搜尋bfs來實現。
首先給出二叉樹的結構:
typedef
struct nodenode,
*tree;
思路:先訪問根結點,再去訪問左右子樹。
方法:遞迴實現
void
preorder
(tree tree)
同理,中序遍歷與後序遍歷都是通過遞迴來實現。其**如下:
void
inorder
(tree tree)
void
postorder
(tree tree)
總結:無論是哪一種遍歷,都必須要知道中序遍歷序列才能唯一確定一顆樹。
層序遍歷是指按層次的順序從根結點向下逐層進行遍歷,且對於同一層從左到右遍歷。
其實二叉樹的遍歷問題的核心在於:二維結構的線性化。
思路:從結點訪問左右兒子(根入隊->訪問結點->入隊左右兒子)。通過佇列、陣列都能夠實現。
方法一:佇列實現層序遍歷
void
order
(tree tree)
//層序遍歷
if(t-
>right)
q.pop();
}}
方法二:陣列實現層序遍歷
void
order
(tree tree)
//層序遍歷
out++;}
}
給定一棵樹的後序遍歷與中序遍歷的遍歷序列,重建這顆二叉樹。
tree create
(int n,
int*aft,
int*mid)
今日學習分享就這些啦!要和yph一起加油呀! 資料結構學習 樹
樹結構是二叉樹的擴充套件,二叉樹在乙個節點上只有兩個子節點,而樹結構在乙個節點上不只有兩個,可以有n個,n大於等於0,更具有一般意義。二叉樹的概念同樣適用於樹,如完全數,滿樹等,此外還有 有序樹 結點的各子樹從左到右是有次序的,即若交換各子樹相對位置會構成不同的樹。無序樹 結點的各子樹從左到右是無次...
資料結構學習 樹
樹是n個結點的有限集合。n 0時稱為空樹,在任意一棵非空樹中 1 有且僅有乙個特定的稱為根的結點。2 當n 1時,其餘結點可以分為m個互不相交的有限集合,其中每乙個集合本身又是一棵樹。在此,我們主要來學習二叉樹的應用。結點擁有的子樹數稱為結點的度。度為0的結點稱為葉子結點或者終端結點。度不為0的結點...
資料結構學習(四)二叉樹的遍歷
快速理解深度優先搜尋 深度優先搜尋有三種 1.前序遍歷 2.中序遍歷 3.後序遍歷 它們的區別是什麼呢?這三種搜尋型別其實是根據訪問根的順序決定的。直白敘述就是當我們訪問樹時,乙個節點連線的其餘節點的是按什麼順序被列印出來的。那麼前序遍歷根第乙個出現,按照根 左子樹 又子樹的順序 中序遍歷就是左子樹...