二叉樹的定義:
是一顆空樹或者具有以下性質
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 }
1intmain()
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...