1. 程式人生 > >python數據結構之:樹的概述

python數據結構之:樹的概述

順序 前序遍歷 後序遍歷 所有 但我 extern 通用 tor 高度

在計算機科學中,樹是分層結構的抽象模型 。本篇學習筆記記錄樹的內容如下:

樹的基本功能:定義、術語、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數據結構之:樹的概述