資料結構之樹

2022-08-22 04:30:17 字數 3921 閱讀 4595

樹(tree)

樹是一種資料結構,它是由n(n>=1)個有限節點組成乙個具有層次關係的集合。把它叫做 「樹」 是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。樹結構是一種非線性儲存結構,儲存的是具有「一對多」關係的資料元素的集合

每個節點有零個或多個子節點;

沒有父節點的節點稱為根節點;

每乙個非根節點有且只有乙個父節點;

除了根節點外,每個子節點可以分為多個不相交的子樹;

二叉樹是樹類結構中最常見的,也是運用最廣泛的,二叉樹是一種比較有用的折中方案,它新增,刪除元素都很快,並且在查詢方面也有很多的演算法優化,所以,二叉樹既有鍊錶的好處,也有陣列的好處,是兩者的優化方案,在處理大批量的動態資料方面非常有用。它具有以下幾個特點:

每個結點最多有兩顆子樹,結點的度最大為2。 

左子樹和右子樹是有順序的,次序不能顛倒。 

即使某結點只有乙個子樹,也要區分左右子樹。

二叉樹中,第 i 層最多有 2i-1 個結點。

如果二叉樹的深度為 k,那麼此二叉樹最多有 2k-1 個結點。

滿二叉樹:乙個二叉樹,如果每乙個層的結點數都達到最大值,則這個二叉樹就是滿二叉樹。也就是說,如果乙個二叉樹的層數為k,且結點總數是(2^k) -1 ,則它就是滿二叉樹。

滿二叉樹具有以下性質

滿二叉樹中第 n 層的節點數為 2

n-1個。

深度為 k 的滿二叉樹必有 2k-1 個節點 ,葉子數為 2k-1。

滿二叉樹中不存在度為 1 的節點,每乙個分支點中都兩棵深度相同的子樹,且葉子節點都在最底層。

具有 n 個節點的滿二叉樹的深度為 log2(n+1)。

完全二叉樹:如果二叉樹中除去最後一層節點為滿二叉樹,且最後一層的結點依次從左到右分布,則此二叉樹被稱為完全二叉樹。

完全二叉樹的性質

滿二叉樹中第 n 層的節點數為 2n-1 個。

深度為 k 的滿二叉樹必有 2k-1 個節點 ,葉子數為 2k-1

n 個結點的完全二叉樹的深度為 ⌊log2n⌋+1。

先序遍歷:

訪問根節點;

訪問當前節點的左子樹;

若當前節點無左子樹,則訪問當前節點的右子樹;

先序遍歷具體過程:

訪問該二叉樹的根節點,找到 1;

訪問節點 1 的左子樹,找到節點 2;

訪問節點 2 的左子樹,找到節點 4;

由於訪問節點 4 左子樹失敗,且也沒有右子樹,因此以節點 4 為根節點的子樹遍歷完成。但節點 2 還沒有遍歷其右子樹,因此現在開始遍歷,即訪問節點 5;

由於節點 5 無左右子樹,因此節點 5 遍歷完成,並且由此以節點 2 為根節點的子樹也遍歷完成。現在回到節點 1 ,並開始遍歷該節點的右子樹,即訪問節點 3;

訪問節點 3 左子樹,找到節點 6;

由於節點 6 無左右子樹,因此節點 6 遍歷完成,回到節點 3 並遍歷其右子樹,找到節點 7;

節點 7 無左右子樹,因此以節點 3 為根節點的子樹遍歷完成,同時回歸節點 1。由於節點 1 的左右子樹全部遍歷完成,因此整個二叉樹遍歷完成;

先序遍歷的最終結果為:1,2,4,5,3,6,7

中序遍歷:

訪問當前節點的左子樹;

訪問根節點;

訪問當前節點的右子樹

中序遍歷具體過程:

訪問該二叉樹的根節點,找到 1;

遍歷節點 1 的左子樹,找到節點 2;

遍歷節點 2 的左子樹,找到節點 4;

由於節點 4 無左孩子,因此找到節點 4,並遍歷節點 4 的右子樹;

由於節點 4 無右子樹,因此節點 2 的左子樹遍歷完成,訪問節點 2;

遍歷節點 2 的右子樹,找到節點 5;

由於節點 5 無左子樹,因此訪問節點 5 ,又因為節點 5 沒有右子樹,因此節點 1 的左子樹遍歷完成,訪問節點 1 ,並遍歷節點 1 的右子樹,找到節點 3;

遍歷節點 3 的左子樹,找到節點 6;

由於節點 6 無左子樹,因此訪問節點 6,又因為該節點無右子樹,因此節點 3 的左子樹遍歷完成,開始訪問節點 3 ,並遍歷節點 3 的右子樹,找到節點 7;

由於節點 7 無左子樹,因此訪問節點 7,又因為該節點無右子樹,因此節點 1 的右子樹遍歷完成,即整棵樹遍歷完成;

中序遍歷的最終結果為:4,2,5,1,6,3,7

後序遍歷:

從根節點出發

依次遍歷各節點的左右子樹,

直到當前節點左右子樹遍歷完成後,才訪問該節點元素。

後序遍歷具體過程:

從根節點 1 開始,遍歷該節點的左子樹(以節點 2 為根節點);

遍歷節點 2 的左子樹(以節點 4 為根節點);

由於節點 4 既沒有左子樹,也沒有右子樹,此時訪問該節點中的元素 4,並回退到節點 2 ,遍歷節點 2 的右子樹(以 5 為根節點);

由於節點 5 無左右子樹,因此可以訪問節點 5 ,並且此時節點 2 的左右子樹也遍歷完成,因此也可以訪問節點 2;

此時回退到節點 1 ,開始遍歷節點 1 的右子樹(以節點 3 為根節點);

遍歷節點 3 的左子樹(以節點 6 為根節點);

由於節點 6 無左右子樹,因此訪問節點 6,並回退到節點 3,開始遍歷節點 3 的右子樹(以節點 7 為根節點);

由於節點 7 無左右子樹,因此訪問節點 7,並且節點 3 的左右子樹也遍歷完成,可以訪問節點 3;節點 1 的左右子樹也遍歷完成,可以訪問節點 1;

到此,整棵樹的遍歷結束。

後序遍歷最終結果:4,5,2,6,7,3,1

層次遍歷:

通過使用佇列的資料結構,從樹的根結點開始,依次將其左孩子和右孩子入隊。而後每次佇列中乙個結點出隊,都將其左孩子和右孩子入隊,直到樹中所有結點都出隊,出隊結點的先後順序就是層次遍歷的最終結果。

層次遍歷具體過程:

首先,根結點 1 入隊;

根結點 1 出隊,出隊的同時,將左孩子 2 和右孩子 3 分別入隊;

隊頭結點 2 出隊,出隊的同時,將結點 2 的左孩子 4 和右孩子 5 依次入隊;

隊頭結點 3 出隊,出隊的同時,將結點 3 的左孩子 6 和右孩子 7 依次入隊;

不斷地迴圈,直至佇列內為空。

層次遍歷最終結果:1,2,3,4,5,6,7

資料結構之 樹

1.雙親表示法 下標 資料 parentid 2.孩子表示法 data child1 child2 child3 3.雙親孩子表示法 下標 parentid firstchildid secondchildid 節點 下標 next 頁的話next應該是null 4.孩子兄弟表示法 data 第一次...

資料結構之樹

一 樹的基本概念 樹 tree 是元素的集合,樹有多個節點可以儲存元素 二 二叉樹 每個節點最多有兩個子節點的樹稱為二叉樹 常用來做二分查詢 binary search 等 三 b樹 即二叉搜尋樹 binary search tree 是一種特殊形態的二叉樹 1 所有節點最多擁有2個子節點 2 所有...

資料結構之樹

樹是節點的有限集合.度 a的度是3 b的度是2 d的度是2 c的度為0 當前節點的直接分支 葉子 終端節點就是葉子 e f g h c 根 非終端節點就是根 a b d 有序樹 如果e f不可以隨意換順序 就是有序樹 無序樹 如果 e f可以隨意換順序而且不影響邏輯 祖先 對e來說 b,a都是祖先 ...