實驗四:樹與二叉樹的實驗一
阿新 • • 發佈:2018-11-08
一、實驗目的
1、 熟練理解樹和二叉樹的相關概念,掌握的儲存結構和相關操作實現;
2、 掌握樹的順序結構的實現;
3、 學會運用樹的知識解決實際問題
二、實驗內容
自己確定一個二叉樹(樹結點型別、數目和結構自定)利用順序結構方法儲存。實
現樹的構造,並完成:
1) 層序輸出結點資料;
2) 以合理的格式,輸出各個結點和雙親、孩子結點資訊;
3) 輸出所有的葉子結點資訊;
4)分析你的演算法對於給定的二叉樹的儲存效率。
三、實驗步驟
1、依據實驗內容,先確定具體的二叉樹,並說明結點的資料據型別;
2、設計具體的演算法;
3、寫出完整程式;
4、總結、執行結果和分析演算法效率。
1、 熟練理解樹和二叉樹的相關概念,掌握的儲存結構和相關操作實現;
2、 掌握樹的順序結構的實現;
3、 學會運用樹的知識解決實際問題
二、實驗內容
自己確定一個二叉樹(樹結點型別、數目和結構自定)利用順序結構方法儲存。實
現樹的構造,並完成:
1) 層序輸出結點資料;
2) 以合理的格式,輸出各個結點和雙親、孩子結點資訊;
3) 輸出所有的葉子結點資訊;
4)分析你的演算法對於給定的二叉樹的儲存效率。
三、實驗步驟
1、依據實驗內容,先確定具體的二叉樹,並說明結點的資料據型別;
2、設計具體的演算法;
3、寫出完整程式;
4、總結、執行結果和分析演算法效率。
5、總體收穫和不足,疑問等。
原始碼如下:
#include <iostream> #include <string> using namespace std; class BiTree { private: char *bitree; int length; public: BiTree(char *a); ~BiTree(){} void LeverOrder(); void GetPC(); void Getleaf(); }; BiTree::BiTree(char *a) { length=strlen(a); bitree=a; } void BiTree::LeverOrder() { for (int i=0;i<length;i++) { if(bitree[i]!='^') cout<<bitree[i]<<' '; if (bitree[i]=='\0') break; } cout<<endl; } void BiTree::GetPC() { for (int i=0;i<length;i++) { int j=i+1; if (bitree[i]=='^') continue; if (i==0) cout<<bitree[i]<<"為根節點"<<endl; if (i>0&&bitree[j/2-1]!='^') cout<<bitree[i]<<"的雙親為:"<<bitree[j/2-1]<<endl; if (bitree[2*j-1]!='^'&&2*j<length) cout<<bitree[i]<<"的左孩子為:"<<bitree[2*j-1]<<endl; else cout<<bitree[i]<<"無左孩子"<<endl; if (bitree[2*j]!='^'&&2*j-1<length) cout<<bitree[i]<<"的右孩子為:"<<bitree[2*j]<<endl; else cout<<bitree[i]<<"無右孩子"<<endl; cout<<endl; } } void BiTree::Getleaf() { cout<<"葉子結點為:"<<' '; for (int i=0;i<length;i++) if (2*(i+1)>length&&bitree[i]!='^') cout<<bitree[i]<<' '; cout<<endl; } int main() { char a[14]="ABC^DE^^F^^G^"; BiTree tree(a); tree.LeverOrder(); tree.GetPC(); tree.Getleaf(); return 0; }