本程式在code::blocks 17.12上執行正常
#include
#include
//這裡為了省事 把兩個陣列直接寫成靜態變數了。可以寫成乙個結構體並傳參
int tree[10]
;//將被填充的陣列形式的完全二叉樹
int array[11]
=;//需要的數列(順序排列)
int i=1;
//靜態變數:tree的編號,從1開始計,i*2 i*2+1分別表示左兒子右兒子
void
completetree
(int start,
int len,
int leftorright)
else
if(leftorright==1)
else
if(leftorright==-1
)int len1=find;
int start1=start;
int len2=len-len1-1;
int start2=start+find+1;
if(len1!=0)
if(len2!=0)
if(len1==
0&&len2==0)
i=i/2;
//函式結束返回其父節點
return;}
///計算左子樹規模
intcalculationscale
(int size)
int i=1;
int res=2;
for(
;;i++)}
printf
("i=%d\n"
,i);
int j=i-1;
while
(j--
)printf
("res=%d\n"
,res);if
(size>=res)
else
}///以完全二叉樹的形式輸出動態陣列
void
output
(int
* h,
int size)
} i=1;
printf
("\n\n");
limt=limt*2;
}}///num^i
intpower
(int num,
int i)
return res;
}int
main()
設計乙個演算法,判斷乙個二叉樹是否為完全二叉樹
思想 根據完全二叉樹的定義,對完全二叉樹按照從上到下 從左到右的層次遍歷,應該滿足一下兩條要求 某節點沒有左孩子,則一定無右孩子 若某節點缺左或右孩子,則其所有後繼一定無孩子 若不滿足上述任何一條,均不為完全二叉樹。演算法思路 採用層序遍歷演算法,用cm變數值表示迄今為止二叉樹為完全二叉樹 其初值為...
如何建立乙個二叉樹?
用前序序列來建立乙個二叉樹,但單純用前序序列無法還原乙個二叉樹,我們還需要把空節點加入進去。這是一顆我網上隨便找的二叉樹,它的前序序列是1,2,4,8,9,5,10,11,3,6,12,7 我們加入空節點,用0表示,1,2,4,8,0,0,9,0,0,5,10,0,0,11,0,0,3,6,12,0...
判斷乙個樹為完全二叉樹
該節點有左子樹,可以沒有有子樹,但如果有右子樹,就必須有左子樹 這裡我們可以用層序遍歷的思想,借助乙個佇列,佇列儲存的是node 將該節點入佇列,出佇列的同時將下一層自己的左右節點入佇列,設定乙個標誌位,剛開始位true,如果此時左右節點為空時,置為false,第一次為false,當第二次進來時,將...