以順序數列建立乙個完全二叉搜尋樹

2021-10-08 12:05:31 字數 1262 閱讀 2791

本程式在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,當第二次進來時,將...