python數據結構之:樹的概述
樹
在計算機科學中,樹是分層結構的抽象模型 。本篇學習筆記記錄樹的內容如下:
樹的基本功能:定義、術語、ADT
樹的遍歷方法:前序、中序、後序
樹的定義
第一種:樹由一組節點和一組連接節點的邊組成。樹具有以下屬性:
- 樹的一個節點被指定為根節點。
- 除了根節點之外,每個節點 n 通過一個其他節點 p 的邊連接,其中 p 是 n 的父節點。
- 從根路徑遍歷到每個節點路徑唯一。
- 如果樹中的每個節點最多有兩個子節點,我們說該樹是一個二叉樹。
第二種:樹是空的,或者由一個根節點和零個或多個子樹組成,每個子樹也是一棵樹。每個子樹的根節點通過邊連接到父樹的根節點。
下圖說明了樹的這種遞歸定義。使用樹的遞歸定義,我們知道圖中的樹至少有四個節點,因為表示一個子樹的每個三角形必須有一個根節點。
它可能有比這更多的節點,但我們不知道,除非我們更深入樹。
樹的術語
根節點(Root):無父節點 (A)
中間節點(Internal node):具有至少一個子節點的節點 (A, B, C, F)
葉子(External node):無子節點 (E, I, J, K, G, H, D)
祖先(Ancestors)::父母,祖父母,祖父母,等等
後代(Descendant):孩子,孫子,重孫子,等等.
深度(Depth of a node):樹的祖先高度數:任意節點的最大深度. Depth(E) = 2
高度(Height):Height = 3
兄弟姐妹(Sibling):C是B和D的兄弟姐妹.
子樹(Subtree):樹由節點及其後代組成
邊(Edge of tree):邊是樹的另一個基本部分。邊連接兩個節點以顯示它們之間存在關系。每個節點(除根之外)都恰好從另一個節點的傳入連接。每個節點可以具有多個輸出邊。
通路(Path):路徑是由邊連接節點的有序列表。如I到G的Path: I->F->B->A->C->G
樹的ADT
- 二叉樹可以通過存儲一個節點的數據加兩個子指針來實現.
- 具有兩個以上孩子的樹可以使用鏈接的節點列表來實現
通用方法:
- Int size()
- boolean isEmpty()
- Iterator elements()
- Iterator positions()
查詢方法:
- boolean isInternal(p)
- boolean isExternal(p)
- boolean isRoot(p)
更新方法:
- object replace (p, o)
訪問器方法:
- Node root()
- Node parent(p)
- List children(p)
樹的遍歷方法
有三種常用的模式來訪問樹中的所有節點。這些模式之間的差異是每個節點被訪問的順序。我們稱這種訪問節點方式為“遍歷”。
- 先序: 在前序遍歷中,我們首先訪問根節點,然後遞歸地做左側子樹的前序遍歷,隨後是右側子樹的遞歸前序遍歷。
- 後序:在後序遍歷中,我們遞歸地對左子樹和右子樹進行後序遍歷,然後訪問根節點。
- 中序(順序遍歷):在一個中序遍歷中,我們遞歸地對左子樹進行一次遍歷,訪問根節點,最後遞歸遍歷右子樹。
python數據結構之:樹的概述