1、基本概念
二叉樹(shù)(Binary Tree)是每個(gè)節(jié)點(diǎn)最多有兩個(gè)子樹(shù)的樹(shù)結(jié)構(gòu)。通常子樹(shù)被稱作“左子樹(shù)”(left subtree)和“右子樹(shù)”(right subtree)。
二叉樹(shù)的特點(diǎn):
二叉樹(shù)不存在度大于2的結(jié)點(diǎn)。
二叉樹(shù)的子樹(shù)有左右之分,次序不能顛倒。
如下圖中,樹(shù)1和樹(shù)2是同一棵樹(shù),但它們是不同的二叉樹(shù)。
二叉樹(shù)
1)、斜樹(shù)
所有的結(jié)點(diǎn)都只有左子樹(shù)的二叉樹(shù)叫左斜樹(shù)。所有的結(jié)點(diǎn)都只有右子樹(shù)的二叉樹(shù)叫右斜樹(shù)。這兩者統(tǒng)稱為斜樹(shù)。
斜樹(shù)每一層只有一個(gè)結(jié)點(diǎn),結(jié)點(diǎn)的個(gè)數(shù)與二叉樹(shù)的深度相同。其實(shí)斜樹(shù)就是線性表結(jié)構(gòu)。
2)、滿二叉樹(shù)
在一棵二叉樹(shù)中,如果所有分支結(jié)點(diǎn)都存在左子樹(shù)和右子樹(shù),并且所有葉子都在同一層上,這樣的二叉樹(shù)稱為滿二叉樹(shù)。
滿二叉樹(shù)具有如下特點(diǎn):
葉子只能出現(xiàn)在最下一層
非葉子結(jié)點(diǎn)的度一定是2
同樣深度的二叉樹(shù)中,滿二叉樹(shù)的結(jié)點(diǎn)個(gè)數(shù)最多,葉子數(shù)最多。
3)、完全二叉樹(shù)
若設(shè)二叉樹(shù)的高度為h,除第 h 層外,其它各層 (1~h-1) 的結(jié)點(diǎn)數(shù)都達(dá)到最大個(gè)數(shù),第h層有葉子結(jié)點(diǎn),并且葉子結(jié)點(diǎn)都是從左到右依次排布,這就是完全二叉樹(shù)。
完全二叉樹(shù)的特點(diǎn):
葉子結(jié)點(diǎn)只能出現(xiàn)在最下兩層
最下層葉子在左部并且連續(xù)
同樣結(jié)點(diǎn)數(shù)的二叉樹(shù),完全二叉樹(shù)的深度最小
4)、平衡二叉樹(shù)
平衡二叉樹(shù)又被稱為AVL樹(shù)(區(qū)別于AVL算法),它是一棵二叉排序樹(shù),且具有以下性質(zhì):它是一棵空樹(shù)或它的左右兩個(gè)子樹(shù)的高度差的絕對(duì)值不超過(guò)1,并且左右兩個(gè)子樹(shù)都是一棵平衡二叉樹(shù)
2、二叉樹(shù)的性質(zhì)
在二叉樹(shù)的第i層上至多有2^i-1^個(gè)結(jié)點(diǎn)(i>=1)。
深度為k的二叉樹(shù)至多有2^k^-1個(gè)結(jié)點(diǎn)(k>=1)。
對(duì)任何一棵二叉樹(shù)T,如果其終端結(jié)點(diǎn)個(gè)數(shù)為n~0~,度為2的結(jié)點(diǎn)數(shù)為n~2~,則n~0~ = n~2~ + 1。
具有n個(gè)結(jié)點(diǎn)的完全二叉樹(shù)的深度為「log~2~n」+ 1(「x」表示不大于x的最大整數(shù))。
如果對(duì)一棵有n個(gè)結(jié)點(diǎn)的完全二叉樹(shù)的結(jié)點(diǎn)按層序編號(hào)(從第一層到第「log~2~n」+ 1層,每層從左到右),對(duì)任一結(jié)點(diǎn)i(1≤i≤n)有:
若i=1,則結(jié)點(diǎn)i是二叉樹(shù)的根,無(wú)雙親;如i>1,則其雙親是結(jié)點(diǎn)「i/2」。
如2i>n,則結(jié)點(diǎn)i無(wú)左孩子(結(jié)點(diǎn)i為葉子結(jié)點(diǎn));否則其左孩子是結(jié)點(diǎn)2i。
若2i+1>n,則結(jié)點(diǎn)i無(wú)右孩子;否則其右孩子是結(jié)點(diǎn)2i+1。
3、二叉樹(shù)的存儲(chǔ)結(jié)構(gòu)和遍歷
二叉樹(shù)是一種特殊的樹(shù),它的存儲(chǔ)結(jié)構(gòu)相對(duì)于前面談到的一般樹(shù)的存儲(chǔ)結(jié)構(gòu)要簡(jiǎn)單一些。
①順序存儲(chǔ)結(jié)構(gòu)
②鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)