【Java源碼】樹-概述

樹的基本術語

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

二叉樹的定義

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

二叉樹的性質

  • 二叉樹的結點最多隻有兩棵子樹
  • 若根結點的層次爲 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)數據結構

二叉樹的存儲結構

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

順序存儲

二叉樹的順序存儲結構適用於徹底二叉樹,對徹底二叉樹進行順序編號,將編號爲 i 的結
點存放在數組下標爲 i-1 的位置上.二叉樹

鏈式存儲

通常狀況下,採用鏈式存儲結構來存儲二叉樹。每一個結點有 3 個域:終端

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

二叉樹的遍歷

先根序遍歷(DLR)

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

中根序遍歷(LDR)

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

後根序遍歷(LRD)

遍歷左子樹,遍歷右子樹,訪問根結點。表達式的後綴表示(逆波蘭式)d3

參考圖書: 《算法與數據結構》

相關文章
相關標籤/搜索