一、正規(guī)二叉樹(shù)和完全二叉樹(shù)的區(qū)別
二叉樹(shù)是每個(gè)節(jié)點(diǎn)非常多有兩個(gè)兒子的樹(shù)。
正規(guī)二叉樹(shù)是每個(gè)節(jié)點(diǎn)都有兩個(gè)或沒(méi)有兒子的二叉樹(shù)。這意味著,如果一個(gè)節(jié)點(diǎn)有左兒子,那么它必須有右兒子,反之亦然。
完全二叉樹(shù)是一棵二叉樹(shù),其中除了可能深度為 h 或 h-1 的最后一層外,其余各層的節(jié)點(diǎn)數(shù)都達(dá)到最大個(gè)數(shù),即第 i 層非常多有 2^(i-1) 個(gè)節(jié)點(diǎn)(i≥1)。換句話說(shuō),如果二叉樹(shù)中除去最后一層節(jié)點(diǎn)為滿二叉樹(shù),且最后一層的結(jié)點(diǎn)依次從左到右分布,則此二叉樹(shù)被稱為完全二叉樹(shù)。
舉個(gè)例子,下面這棵樹(shù)是一棵正規(guī)二叉樹(shù):
? 1
?/ \
2?? 3
但是,它不是一棵完全二叉樹(shù),因?yàn)榈诙拥墓?jié)點(diǎn)數(shù)不是最大的。
延伸閱讀:
二、完全二叉樹(shù)與滿二叉樹(shù)的區(qū)別是什么
含義不同:
完全二叉樹(shù)是由滿二叉樹(shù)而引出來(lái)的。對(duì)于深度為K的,有n個(gè)結(jié)點(diǎn)的二叉樹(shù),當(dāng)且僅當(dāng)其每一個(gè)結(jié)點(diǎn)都與深度為K的滿二叉樹(shù)中編號(hào)從1至n的結(jié)點(diǎn)一一對(duì)應(yīng)時(shí)稱之為完全二叉樹(shù)。
表示不同:
對(duì)于滿二叉樹(shù),除最后一層無(wú)任何子節(jié)點(diǎn)外,每一層上的所有結(jié)點(diǎn)都有兩個(gè)子結(jié)點(diǎn)二叉樹(shù)。而完全二叉樹(shù)是效率很高的數(shù)據(jù)結(jié)構(gòu),完全二叉樹(shù)是由滿二叉樹(shù)而引出來(lái)的。
對(duì)于深度為K的,有n個(gè)結(jié)點(diǎn)的二叉樹(shù),當(dāng)且僅當(dāng)其每一個(gè)結(jié)點(diǎn)都與深度為K的滿二叉樹(shù)中編號(hào)從1至n的結(jié)點(diǎn)一一對(duì)應(yīng)時(shí)稱之為完全二叉樹(shù)。
判斷一棵樹(shù)是否是完全二叉樹(shù)的思路
1>如果樹(shù)為空,則直接返回錯(cuò)
2>如果樹(shù)不為空:層序遍歷二叉樹(shù)
2.1>如果一個(gè)結(jié)點(diǎn)左右孩子都不為空,則pop該節(jié)點(diǎn),將其左右孩子入隊(duì)列;
2.1>如果遇到一個(gè)結(jié)點(diǎn),左孩子為空,右孩子不為空,則該樹(shù)一定不是完全二叉樹(shù);
2.2>如果遇到一個(gè)結(jié)點(diǎn),左孩子不為空,右孩子為空;或者左右孩子都為空,且則該節(jié)點(diǎn)之后的隊(duì)列中的結(jié)點(diǎn)都為葉子節(jié)點(diǎn),該樹(shù)才是完全二叉樹(shù),否則就不是完全二叉樹(shù);