順序二叉樹

添加頭文件

聲明宏定義

設計數據結構

功能函數聲明

具體功能實現













簡單調用測試

   int main()
    {
    	TYPE arr[] = {1,2,3,4,5,6,7,8};
		BinTree* tree = creat_tree(256);
		init_tree(tree,arr,8);
	
	    prev_show(tree);
		in_show(tree);
		post_show(tree);
		
	 	printf("%d\n",*lchild_tree(tree,2));
	//	printf("%d\n",*lchild_tree(tree,8)); // 無左節點,返回空,*有段錯誤,但算法沒錯	 
	//	printf("%d\n",*lbrother_tree(tree,7)); //  無節點的情況下段錯誤
	 	printf("%d\n",*rchild_tree(tree,2));
	 	printf("%d\n",*rbrother_tree(tree,2));
	 	printf("%d\n",*parent_tree(tree,2));
	 
		printf("%d\n",*access_tree(tree,2,2));
	 
 		level_order_show(tree);
	 	printf("%d\n",*parent_tree(tree,2));
	
		printf("%d\n",high_tree(tree));
    }

結果

總結

創建:堆內存,存儲數據空間,以及容量
初始化:將數組中的元素拷貝到樹的各結點
前序遍歷:打印根;在左子樹不爲空的情況下,打印左子樹(i * 2+1);在右子樹不爲空的情況下,打印右子樹(i * 2+2)
子函數:調用前序遍歷函數
中序遍歷:左,根,右
子函數:調用中序遍歷函數
後序遍歷:左,右,根
子函數:調用後序遍歷函數
左子結點(找該值的左子節點):找到該結點,判斷該結點是否有左子結點(i2+1),返回結點地址
右子結點:找到該結點,判斷該結點是否有右子結點(i
2+2),返回結點地址
左兄弟:該結點必須是右子結點,纔會有左兄弟,因此下標必須是偶數(0==i%2),返回其左邊一個地址
注意:若沒有左兄弟會產生段錯誤
右兄弟:,該結點必須是左子結點,纔會有右兄弟,因此下標必須是奇數(i%2),返回其右邊一個地址
注意:根結點沒有左右兄弟
父結點:在確保有父結點的情況下,返回其父結點地址
注意:根結點沒有父結點
訪問:判斷所給值是否超出該行結點數,算出第幾行第幾個的下標,判斷下標是否越界,沒有則返回下標地址
高度:從最大容量回倒,找到最後一個結點的下標,計算樹高並返回高度
層號(每一層打印一行):獲取層數,循環下打印訪問結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章