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...