實驗 4 樹和二叉樹的實驗 1

2021-08-19 18:17:03 字數 1770 閱讀 5823

1、熟練理解樹和二叉樹的相關概念,掌握的儲存結構和相關操作實現;

2、掌握樹的順序結構的實現;

3、學會運用樹的知識解決實際問題。

二、實驗內容

自己確定乙個二叉樹(樹結點型別、數目和結構自定)利用順序結構方法儲存。

實現樹的構造,並完成:

1) 層序輸出結點資料; 

2) 以合理的格式,輸出各個結點和雙親、孩子結點資訊; 

3) 輸出所有的葉子結點資訊;

4) 分析你的演算法對於給定的二叉樹的儲存效率。 

三、設計與編碼

1.本實驗用到的知識理論

(1)二叉樹的順序儲存結構就是一維陣列儲存二叉樹的結點,並且用結點的儲存位置(下標)表示結點之間的邏輯關係;

(2)把二叉樹補充為完全二叉樹再放到陣列中更方便儲存,這樣就可以根據結點之間的邏輯關係可通過下標輸出;

(3)將二叉樹中的結點以編號順序儲存到一維陣列中,注意陣列下標從0快開始。

2.演算法設計

(1)定義bitree類模板

class bitree

//析構函式

void leveroder();      //輸出二叉樹中的結點

void output(int length);  

void leaf(); //輸出葉子資訊 

};(2)建構函式:把二叉樹btree存放到node陣列中,若二叉數某個結點沒有(即0),存放到陣列中就為空,並考慮陣列為滿為空的情況;

(3)層序遍歷:若陣列中某個位置為null,則不輸出這個結點;

(4)輸出結點的雙親和孩子結點資訊:通過陣列下標輸出雙親和孩子結點(若沒有,則輸出無雙親、無孩子結點),若結點不存在就跳到下乙個;

(5)輸出葉子資訊:

a.不是最後一層但為葉子滿足:既沒有左孩子和右孩子,且該結點不為空 

b.在最後一層沒有左孩子且該結點不為空。

3.**   

#include

#define maxlength 20     //陣列長度為20

class bitree

//析構函式

void leveroder();      //層序遍歷函式實現

void output(int length);  

void leaf(); //輸出葉子資訊 

};bitree::bitree(int *btree,int n)

length=n;

}void bitree::leveroder()  //層序遍歷函式實現  

else cout<

cout<

else cout<=length)  //此時陣列中的值為空,說明在二叉數中沒左孩子

cout<

else cout<=length)  //此時陣列中的值為空,說明在二叉數中沒右孩子

cout<

}void bitree::leaf() //輸出葉子資訊   

;   //非完全二叉數

bitree node(btree,12);

cout<

cout

cout

cout

}四、執行與測試

五、總結與心得

二叉樹是度不超過2的樹,採用順序儲存的方法,可以將二叉樹補充為完全二叉樹的規格來儲存資料,這種儲存方法適用於完全二叉樹和滿二叉樹,儲存效率較高,但不適用於左斜樹和右斜樹,因為會導致大量儲存空間浪費。

實驗四 樹和二叉樹的實驗1

includeusing namespace std const int maxsize 100 樹最大規模為100 class tree void leveroder 層序輸出 void parch 輸出結點的雙親 孩子資訊 void leaf 輸出葉子資訊 tree tree char a,in...

實驗 5 樹和二叉樹的實驗 1

實驗 5 樹和二叉樹的實驗 1 一 實驗目的 1 熟練理解樹和二叉樹的相關概念,掌握的儲存結構和相關操作實現 2 掌握樹的順序結構的實現 3 學會運用樹的知識解決實際問題 二 實驗內容 自己確定乙個二叉樹 樹結點型別 數目和結構自定 利用順序結構方法儲存。實 現樹的構造,並完成 1 層序輸出結點資料...

實驗4 樹與二叉樹的實驗

include includeusing namespace std class tree int tree count 0 tree tree void tree printtree cout a q cout endl void tree findpc cout 輸入要查詢的節點的下標 endl...