樹與二叉樹

2021-06-22 17:51:43 字數 2274 閱讀 3855

樹是一類重要的非線性資料結構,是以分支關係定義的層次結構

定義:樹(tree)是n(n>=0)個結點的有限集t,其中:

n=0時為空樹

n>0時,有且僅有乙個特定的結點,稱為樹的根(root)

當n>1時,其餘結點可分為m(m>0)個互不相交的有限集t1,t2,……tm,

其中每乙個集合本身又是一棵樹,稱為根的子樹(subtree)

特點:非空樹中至少有乙個結點——根

樹中各子樹是互不相交的集合 基本

概念:結點(node)——表示樹中的元素,包括資料項及若干指向其子樹的分支

結點的度(degree)——結點擁有的子樹數

葉子(leaf)

——度為0的結點

孩子(child)——結點子樹的根稱為該結點的孩子

雙親(parents)——孩子結點的上層結點叫該結點的~

兄弟(sibling)——同一雙親的孩子

樹的度——一棵樹中最大的結點度數

結點的層次(level)——從根結點算起,根為第一層,它的孩子為第二層……

深度(depth)——樹中結點的最大層次數

森林(forest)——m(m>=0)棵互不相交的樹的集合

二叉樹

定義:二叉樹是n(n>=0)個結點的有限集,它或為空樹(n=0),或由乙個根結點和兩棵分別稱為

左子樹和右子樹的互不相交的樹構成

特點:

每個結點至多有二棵子樹(即不存在度大於2的結點)

二叉樹的子樹有左、右之分,且其次序不能任意顛倒

性質:

1.

在二叉樹的第i層至多有2i-1個結點(i>=1)

2.深度為k的二叉樹至多有2k-1個結點(k>=1)

3.對任何一棵二叉樹t,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1

證明:n1為二叉樹t中度為1的結點數

因為:二叉樹中所有結點的度均小於或等於2

所以:其結點總數n=n0+n1+n2

又二叉樹中,除根結點外,其餘結點都只有乙個分支進入

設b為分支總數,則n=b+1

又:分支由度為1和度為2的結點射出,即 b=n1+2n2

於是,n=b+1=n1+2n2+1=n0+n1+n2

即:n0=n2+1

滿二叉樹定義:

乙個深度為k,且有2k-1個結點的二叉樹

完全二叉樹

定義:深度為k,有n個結點的二叉樹當且僅當

其每乙個結點都

與深度為k的滿二叉樹中編號從1至n的結點一一對應

特點:葉子結點只可能在層次最大的兩層上出現

對任一結點,若其右分支下子孫的最大層次為i,則其左分支下子孫的最大層次必為i或i+1

性質:4

.具有k個結點的完全二叉樹,深度為(log

2k)向下取整再加一

性質:5.

如果對一棵有n個結點的完全二叉樹的結點按層序編號,則對任一結點i(1<=i<=n),有:

(1)  如果i=1,則結點i是二叉樹的根,無雙親;如果i>1,則其雙親是i/2

(2)  如果2i>n,則結點i無左孩子;如果2i<=n,則其左孩子是2i

(3)  如果2i+1>n,則結點i無右孩子;如果2i+1<=n,則其右孩子是2i+1

二叉樹的遍歷

方法先序遍歷:先訪問根結點,然後分別先序遍歷左子樹、右子樹

中序遍歷:先中序遍歷左子樹,然後訪問根結點,最後中序遍歷右子樹

後序遍歷:先後序遍歷左、右子樹,然後訪問根結點

按層次遍歷:從上到下、從左到右訪問各結點

void printq(tree *t)  //先序遍歷輸出

}void printz(tree *t) //中序遍歷輸出

}void printh(tree *t) //後序遍歷輸出

}

void ccbl(tree *t)      //層次遍歷輸出

}

二叉樹 滿二叉樹與完全二叉樹

二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...

樹與二叉樹

建立 先序二叉樹,中序二叉樹,後序二叉樹。給定兩種遍歷序列 前序中序或後序中序 重塑二叉樹 遍歷 判斷乙個節點是否存在於二叉樹中 二叉樹的遍歷 先序,中序,後序 遞迴 非遞迴 層次遍歷 從上到下或從下到上列印 zigzag遍歷方式層次遍歷 二叉樹性質 二叉樹中葉子節點的個數 二叉樹第k層節點數目 二...

樹與二叉樹

如圖所示 左邊就是乙個傳統的樹結構,右邊是乙個二叉樹。為何要有二叉樹呢?這是一種對傳統樹對表示方式,是為了便於程式對設計與實現。從左右兩個樹可以看到,任何形式對樹,都可以使用二叉樹來表示。這樣,通過 兒子 兄弟節點 這樣都資料結構,就可以表示二叉樹的每個節點。通過這樣的乙個45度的旋轉,又可以將二叉...