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