回覆列表
-
1 # 老弟弟二
-
2 # 我是阿嘛
由完全二叉樹性質可知,若給每個結點依次序標上1~n序號,序號為 i 的結點(假設有兩個孩紙存在)其左孩紙序號為 2i(皆為偶數),右孩紙序號為 2i + 1 (皆為奇數),故 1001 為右孩子,其父結點序號為 500 ( 2i + 1 = 1001 解得 i = 500 ),故n2 = 500 (按規律501的孩紙序號應為501 * 2 = 1002 和 1003, 此題一共只有1001個結點,故501 沒有孩紙),n1要麼為 0 要麼為 1 ,奇數個結點時為最後一個葉子結點為右孩紙,偶數個結點時最後一個為左孩紙。
具體如下:
1、簡介
完全二叉樹的定義、性質以及演算法見正文。這裡補充一點:完全二叉樹是效率很高的資料結構,堆是一種完全二叉樹或者近似完全二叉樹,所以效率極高,像十分常用的排序演算法、Dijkstra演算法、Prim演算法等都要用堆才能最佳化,幾乎每次都要考到的二叉排序樹的效率也要藉助平衡性來提高,而平衡性基於完全二叉樹。
2、判斷完全二叉樹
完全二叉樹:葉節點只能出現在最下層和次下層,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹
3、完全二叉樹定義
若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。
換種思路:跟這個同一深度的滿二叉樹的結點數為1023,其中最後一行512個而這個1001個少了22個,少在了最後一行,所以這缺失的22個的父結點都是葉子,共22/2=11個而這一行剩下512-22=490個葉子,所以總共490+11=501個葉子結點或者直接想"原本應該度為2的22個結點變成了葉子結點相當於少了22/2個葉子結點"所以512-22/2=490