1. 程式人生 > >【Java原始碼】樹-概述

【Java原始碼】樹-概述

樹的基本術語

  • 結點(node)由資料元素以及指向子樹的地址構成。
  • 若 X 結點有子樹,則子樹的根結點稱為 X 的孩子(child)結點,相應地,
    X 稱為其孩子的雙親(parents)結點,又稱父母結點。
  • 同一雙親的孩子結點之間互稱兄弟(sibling)結點。
  • 葉子(leaf)結點是指度為 0 的結點,又稱為終端結點。其他的叫分支結點

二叉樹的定義

二叉樹由一個根結點或兩棵互不相交的、分別稱為左子樹和右子樹的子二叉樹構成。

二叉樹的性質

  • 二叉樹的結點最多隻有兩棵子樹
  • 若根結點的層次為 1,則二叉樹第 i 層的結點數目最多為 2i-1(i≥1)個。
  • 在深度為 k 的二叉樹中,至多有 2k -1 個結點(k≥0)。
  • 二叉樹中,若葉子結點數為 n0,度為 2 的結點數為 n2,則有 n0=n2+1。

  • 滿二叉樹:一棵深度為 k 的滿二叉樹(full binary tree)是具有 2k -1 (k≥0)個結點的二叉樹。滿二叉樹每一層的結點數目都達到最大值.

  • 完全二叉樹:一棵具有 n 個結點深度為 k 的二叉樹,如果它的每一個結點都與深度為 k 的滿二叉樹中編
    號為 1~n 的結點一一對應,則稱這棵二叉樹為完全二叉樹(complete binary tree)

二叉樹的儲存結構

二叉樹的儲存結構有兩種:順序儲存結構和鏈式儲存結構。

順序儲存

二叉樹的順序儲存結構適用於完全二叉樹,對完全二叉樹進行順序編號,將編號為 i 的結

點存放在陣列下標為 i-1 的位置上.

鏈式儲存

一般情況下,採用鏈式儲存結構來儲存二叉樹。每個結點有 3 個域:

  • data 表示結點的資料元素。
  • left 指向該結點的左孩子結點,即左子樹的根結點。
  • right 指向該結點的右孩子結點,即右子樹的根結點。

二叉樹的遍歷

先根序遍歷(DLR)

訪問根結點,遍歷左子樹,遍歷右子樹。表示式的字首表示(波蘭式)

中根序遍歷(LDR)

遍歷左子樹,訪問根結點,遍歷右子樹。表示式的中綴表示

後根序遍歷(LRD)

遍歷左子樹,遍歷右子樹,訪問根結點。表示式的字尾表示(逆波蘭式