1. 程式人生 > >筆記:樹的認識

筆記:樹的認識

常識 鏈式 gpo 排序 rest 終端 ron 筆記 中序

筆記:樹的認識


技術分享圖片

基本常識:

  • 結點1為2、3、4的父結點,

  • 結點2、3、4是結點1的子結點。

  • 結點2、3、4也是兄弟結點。

  • 因為他們是同一個父結點。

  • 同是結點2又是結點5、6的父結點

  • 結點3沒有子結點,所以他是葉結點

  • 結點4又是結點7的父結點。

從根結點到某個子結點所經過的所有結點稱為這個子結點的祖先。

比如:結點1,4,7結點8的祖先

以某個結點為根的子樹中的任一結點都是該結點的子孫。

比如:結點7、8、9是結點4的子孫。結點4、7、8、9是結點1的子孫,實際上除結點1以外的結點都是結點1的子孫。

樹的定義:(非線性數據結構)

一棵樹(tree)是由n(n>0)個元素組成的有限集合,其中:

(1)每個元素稱為結點(node);比如上圖中的1、2、3、4、5......

(2)有一個特定的結點,稱為根結點或根(root);上圖中的1

(3)除根結點外,其余結點被分成m(m>=0)個互不相交的有限

集合,而每個子集又都是一棵樹(稱為原樹的子樹)

基本概念:

度:

樹的度——也即是寬度,簡單地說,就是結點的分支數。以組成該樹各結點中最大的度作為該樹的度,如左圖的樹,其度為3;樹中度為零的結點稱為葉結點或終端結點。樹中度不為零的結點稱為分枝結點或非終端結點。除根結點外的分枝結點統稱為內部結點。

深度:

樹的深度——定義一個樹的根結點的層次為1,其他結點的層次等於它的父結點的層次數加1。比如結點2、3、4的層次為2,結點8、9的層次為4。一棵樹中所有結點的層次的最大值稱為樹的深度,如上 圖其深度為4;

路徑:

對於一棵子樹中的任意兩個不同的結點,如果從一個結點出發,按層次自上而下沿著一個個樹枝能到達另一結點,稱它們之間存在著一條路徑。可用路徑所經過的結點序列表示路徑,路徑的長度等於路徑上的結點個數減1.

(植樹原理)比如根結點1到葉結點9,一共有1、4、7、9四個結點,4-1=3。3就是1號結點到9號結點的路徑長度,路徑就是(1、4、7、9)

森林(forest):

指m(m>=0)棵互不相交的樹的集合

二叉樹:

技術分享圖片

二叉樹基本概念:

在計算機科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹是遞歸定義的,邏輯上二叉樹有五種基本形態:

(1)空二叉樹——如圖(a);

(2)只有一個根結點的二叉樹——如圖(b);

(3)只有左子樹——如圖(c);

(4)只有右子樹——如圖(d);

(5)完全二叉樹——如圖(e)。

類型:

(1)完全二叉樹——若設二叉樹的高度為k,除第 k 層外,其它各層 (1~k-1) 的結點數都達到最大個數,第k層有葉子結點,並且葉子結點都是從左到右依次排布,這就是完全二叉樹。

(2)滿二叉樹——除了葉結點外每一個結點都有左右子葉且葉子結點都處在最底層的二叉樹。一棵深度為k,且有2^k-1個節點稱之為滿二叉樹;

(3)平衡二叉樹——平衡二叉樹又被稱為AVL樹(區別於AVL算法),它是一棵二叉排序樹,且具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。請百度.....

技術分享圖片

技術分享圖片

二叉樹遍歷:

技術分享圖片

先序遍歷 DLR

先序遍歷是先訪問根結點,再左子樹,再右子樹,

比如上圖,先序遍歷的輸出如下:1 ,2,4,5,3,6,8,7

中序遍歷LDR

中序是先訪問左子樹, 再根結點,再右子樹。

比如上圖,先序遍歷的輸出如下4,2,5,1,8,6,3,7

後序遍歷LRD

後序是先訪問左子樹, 再右子樹,再根結點。

比如上圖,先序遍歷的輸出如下:4,5,2,8,6,7,3,1

說說二叉樹的存儲結構,跟很多其它模型一樣,

也有順序和鏈式兩種方式。前者雖然使用簡單,

但是存在浪費空間的問題,舉個例子,上圖的二叉樹,

用順序的方式存儲(0表示空,沒有子樹)是:

1 2 3 4 5 6 7 0 0 0 0 8 0 0 0

筆記:樹的認識