樹的基本概念

2021-07-26 13:28:34 字數 1004 閱讀 7087

邏輯非線性結構

資料和資料之間是1:m

若某個節點有後繼,則後繼節點可以是多個

若某個節點有前驅,則前驅節點只能是乙個

可以把節點分成前驅節點和後繼節點

節點的度:若a節點有m個子節點,則節點a的度是m

樹的度·:樹中節點最大的度

度為n,高度為h的樹中,最多有多少個節點?:1+n+n^2+n^3+....+n^(h-1)

樹的遍歷:對樹中所有節點,無遺漏,無重複的訪問一遍

遍歷的方法:

深度優先遍歷:優先訪問某乙個「路徑」,直到葉子節點

根節點入棧;

while(棧非空)

廣度優先遍歷:優先訪問同層的所有節點

根節點入隊

while(隊非空)tree;

tree *tree;

tree->child = (tree *)malloc(sizeof(tree) * tree->childcount);

使用上述方式申請乙個節點的子節點數目,那麼這個子節點的數目就被固定

另一種方法:將節點依次排上編號,從0開始

將每乙個節點的資料和其父節點的下標放在一起

二叉數:

二叉樹的子節點分左右

滿二叉樹:高度為h的節點,節點總數為2^h-1

一顆二叉樹的節點總數為n,則二叉樹的高度是[log(2)n]+1

完全二叉樹

1.假設乙個完全二叉樹的節點總數是n,且從上到下,從左到右一次編號。那麼為 i 的節點如果有左節點,那麼左節點的編號是2*i,右節點的個數是2*i+1

2.乙個高度為h的二叉樹,其節點總數最少是2^(h-1),最多是2^h-1個

3.任意乙個二叉樹:n0 = n2 + 1

問題:乙個節點總數是n的二叉樹,n為偶數,則葉子節點數是多少?

n總 = n0 + n1 +n2

n0 = n2 + 1

n總 = n1+2n0-1

因為n總是偶數,則其葉子數是奇數個,所以n1= 1

no = n總/2

樹的基本概念

樹的遞迴定義如下 單個結點是一棵樹,樹根就是該結點本身。設t1,t2,tk是樹,它們的根結點分別為n1,n2,nk。用乙個新結點n作為n1,n2,nk的父親,則得到一棵新樹,結點n就是新樹的根。我們稱n1,n2,nk為一組兄弟結點,它們都是結點n的子結點。我們還稱t1,t2,tk為結點n的子樹。空集...

樹的基本概念

樹是n n 0 個結點的有限集。n 0時稱為空樹。在任意一課非空樹中 1 有且僅有乙個特定的稱為根的結點 2 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1 t2 tm,其中每乙個集合本身又是一棵樹,並且稱為根的子樹。注意點樹的結點包含乙個資料元素及若干指向其子樹的分支。結點擁有的子樹...

樹的基本概念

一 樹的定義 樹是n個結點的有限集合,n 0時為空樹,任意非空樹應滿足 1.僅有乙個根結點 2.當n 1時,其餘結點又分為互不相交的有限集合,為根結點子樹 二 基本術語 1.結點的度 樹中結點的子結點個數 2.樹的度 樹中結點的最大度數 3.葉子結點 度為0的結點,沒有子結點 4.樹的高度 又稱深度...