資料結構樹之二叉樹

2021-06-21 10:46:21 字數 2699 閱讀 5562

二叉樹的定義:

是一顆空樹或者具有以下性質

1.結點最多只有兩個孩子,且有左右之分。不能交換左右孩子

2.結點點的左子樹和右子樹也是二叉樹。

例圖

二叉樹的基本形態:

二叉樹中的術語:

1).結點度:節點所擁有的字數的個數成為該節點的度,在二叉樹中度的取值只能是0,1,2.

2).葉節點:度為0的節點成為葉結點或終端結點。

3).左孩子、右孩子、雙親:樹中乙個結點的子樹的根結點稱為這個結點的孩子。這個結點稱為它孩子結點的雙親。具有同乙個雙親的孩子結點互稱為兄弟。

4).路徑、路徑長度:如果一棵樹的一串結點n1,n2,…,nk有如下關係:結點ni是ni+1的父結點(1≤i5).結點的層數:規定樹的根結點的層數為1,其餘結點的層數等於它的雙親結點的層數加1。

6).樹的深度:樹中所有結點的最大層數稱為樹的深度。

7).滿二叉樹。 在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,並且所有葉子結點都在同一層上,這樣的一棵二叉樹稱作滿二叉樹。

8).完全二叉樹。一棵深度為k的有n個結點的二叉樹,對樹中的結點按從上至下、從左到右的順序進行編號,如果編號為i(1≤i≤n)的結點與滿二叉樹中編號為 i的結點在二叉樹中的位置相同,則這棵二叉樹稱為完全二叉樹。完全二叉樹的特點是:葉子結點只能出現在最下層和次下層,且最下層的葉子結點集中在樹的左 部。

二叉樹的性質:

1).非空二叉樹葉子結點數等於度為2的結點數加1,即n0=n2+1.(其中n0和n2分別是葉結點和度為2結點的個數)。

2).非空二叉樹第k層上最多有 2^(k - 1)個結點(k>= 1).

3).高度為h的節點,最多有2^h - 1個節點(h >= 1).

二叉樹的基本操作:

/*以下為二叉樹的常用操作(如有錯誤之處還望之處)

採用二叉鍊錶的儲存結構*/

1 typedef struct bitnode    //

二叉樹的節點

2bitnode;

//建立二叉樹(先序)

1

//建立二叉樹(先序)

2void createbitree(bitnode * &pcurrent)

316 }

//遞迴實現前序遍歷二叉樹

1

void preordervisituserecur(const bitnode *pcurrent)

29 }

//用棧,不用遞迴實現前序排列

1

void preordervisitusestack(const bitnode *pcurrent)213

else

142021}

22 }

//遞迴實現中序遍歷

1

void inordervisituserecur(const bitnode *pcurrent)

29 }

//用棧實現中序遍歷

1

void inordervisitusestack(const bitnode *pcurrent)212

else

1320

}21 }

//遞迴實現後序遍歷

1

void afterordervisituserecur(const bitnode *pcurrent)

29 }

//用棧實現後序遍歷

1

void afterordervisitusestack(const bitnode *pcurrent)214

else

1521

}22 p =null;

23while(!pnodestack2.empty())

2429 }

//按層次進行遍歷(有點小問題)

1/*2

void levelordervisit(const bitnode *pcurrent)310

while(!pnodedeue.empty()||p)

1122}23

}24*/

//計算樹的深度

1

int gettreedepth(const bitnode *pcurrent)29

else

1015 }

//計算樹節點的個數

1

int couttreenodenums(const bitnode *pcurrent)28

else913

return leftnums + rightnums + 1

;14 }

//以下是各操作的例項

1

intmain()

2

資料結構之二叉樹

在二叉樹中每個節點最多只能有兩個子節點。即左子節點和有子節點。在二叉樹中最重要的操作應當是遍歷。即按照某一順序訪問二叉樹中的每乙個節點。一般有如下幾種遍歷方法 1 前序遍歷,即先訪問根幾點,然後再訪問左子節點,最後訪問右子節點。2 中序遍歷,即先訪問左子節點,然後再訪問根節點,最後訪問右子節點。3 ...

資料結構之二叉樹

定義 滿足以下條件的就是樹 1.有且僅有乙個特定的稱為根root的結點。2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是乙個棵樹,並稱為根的子樹。樹是資料結構中一種常見的資料結構,比如我們排序中常見的二叉樹,紅黑樹等。最常見的是樹形表示法和廣義表表示法。樹的結構示意...

資料結構之二叉樹

來看一下樹的結構 class treenode public treenode string value 首先,為了方便後面看到效果,先手動初始化乙個有4個節點的二叉樹 tree tree new tree treenode root new treenode root treenode node1...