Java數據結構——樹(基本概念)

1、樹的定義

樹(Tree)是 n(n≥0) 個結點的有限集T,而且當 n>0 時知足下列條件:node

有且僅有一個特定的稱爲根(Root)的結點;
當 n>1 時,其他結點能夠劃分爲 m(m>0) 個互不相交的有限集T一、T2 、…、Tm,每一個集 Ti(1≤i≤m) 均爲樹,且稱爲樹T的子樹(SubTree)。
特別地,不含任何結點(即n=0)的樹,稱爲空樹。spa

以下是一棵樹的結構:3d

圖1

2、基本術語

根節點(root): 樹頂端的節點稱之爲根節點,也叫樹根。blog

子樹(subTree): 除根節點以外,其餘節點能夠分爲多個樹的集合,叫作子樹,如圖1中,H這個節點能夠稱之爲一顆子樹,而D、H、I三個節點組合起來也能夠叫作一顆子樹。it

結點(node): 存儲數據元素和指向子樹的連接,由數據元素和構造數據元素之間關係的引用組成。io

子結點: 樹中一個結點的子樹的根結點稱爲這個結點的子結點,如圖1中的A的子結點有B、C、Dclass

雙親結點: 樹中某個結點有孩子結點(即該結點的度不爲0),該結點稱爲它孩子結點的雙親結點,也叫前驅結點。雙親結點和孩子結點是相互的,如圖1中,A的孩子結點是B、C、D,B、C、D的雙親結點是A。二叉樹

兄弟結點: 具備相同雙親結點(即同一個前驅)的結點稱爲兄弟結點,如圖1中B、C、D爲兄弟結點。終端

堂兄弟節點: 同一層,父節點不一樣,或者說雙親節點在同一層的節點稱之爲堂兄弟節點。如圖1的E、F、G、H、I。遍歷

葉子結點: 度爲0的結點稱爲葉子結點,也叫終端結點。如圖1的E、F、G、H、I

分支結點: 度不爲0的結點稱爲分支結點,也叫非終端結點。如圖1的A、B、C、D

節點的祖先: 從根節點到某一節點一路順下來的除了該節點的全部節點都是該節點的祖先節點。

節點的子孫: 以某節點爲根的子樹中,任何一個節點都是其子孫,也就是說這個節點下面與這個節點有關的節點都是這個節點的子孫。

結點的度: 結點全部子樹的個數稱爲該結點的度,如圖1,A的度爲3,B的度爲2。

樹的度: 樹中全部結點的度的最大值稱爲樹的度,如圖1的度爲3。

結點的層次: 從根結點到樹中某結點所經路徑的分支數稱爲該結點的層次。根結點的層次通常爲1(也能夠本身定義爲0),這樣,其它結點的層次是其雙親結點的層次加1.

樹的深度: 從根節點開始、自頂向下逐層累加(根節點的高度是1)助記:深度從上到下。

樹的高度: 從葉節點開始、自底向上逐層累加(葉節點的高度是1)助記:高度由下向上。

有序樹和無序樹: 樹中任意一個結點的各子樹按從左到右是有序的,稱爲有序樹,不然稱爲無序樹。

森林: 由m棵不相交的樹組成的集合,叫作森林。

數據元素: 具備相同特性的數據元素的集合。

結構關係: 樹中數據元素間的結構關係由樹的定義肯定。

3、樹的類型

常見的樹有二叉樹、平衡二叉樹、二叉查找樹、B樹、B+樹、哈夫曼樹、B*樹、紅黑樹和trie樹等。

4、基本操做

  1. 建立樹IntTree(&T)
  2. 銷燬樹DestroyTree(&T)
  3. 構造樹CreatTree(&T,deinition)
  4. 置空樹ClearTree(&T)
  5. 判空樹TreeEmpty(T)
  6. 求樹的深度TreeDepth(T)
  7. 得到樹根Root(T)
  8. 獲取結點Value(T,cur_e,&e)
  9. 數據賦值Assign(T,cur_e,value)
  10. 得到雙親Parent(T,cur_e)
  11. 得到最左孩子LeftChild(T,cur_e)
  12. 得到右兄弟RightSibling(T,cur_e)
  13. 插入子樹InsertChild(&T,&p,i,c)
  14. 刪除子樹DeleteChild(&T,&p,i)
  15. 遍歷樹TraverseTree(T,visit())
相關文章
相關標籤/搜索