歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

大大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計二叉樹地遍歷

  • 資源ID:86639953       資源大小:93KB        全文頁數(shù):21頁
  • 資源格式: DOC        下載積分:10積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

大大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計二叉樹地遍歷

word摘要針對現(xiàn)實世界中許多關(guān)系復(fù)雜的數(shù)據(jù),如人類社會的家譜,各種社會組織機構(gòu),博弈交通等復(fù)雜事物或過程以與客觀世界中廣泛存在的具有分支關(guān)系或?qū)哟翁匦缘膶ο笕绮僮飨到y(tǒng)的文件構(gòu)成、人工智能和算法分析的模型表示以與數(shù)據(jù)庫系統(tǒng)的信息組織形式等,用線性結(jié)構(gòu)難以把其中的邏輯關(guān)系表達出來,必須借助于數(shù)和圖這樣的非線性結(jié)構(gòu),因此在以模擬客觀世界問題,解決客觀世界問題為主要任務(wù)的計算機領(lǐng)域中樹型結(jié)構(gòu)是信息的一種重要組織形式,樹有著廣泛應(yīng)用。在樹型結(jié)構(gòu)的應(yīng)用中又以二叉樹最為常用。二叉樹是一種非常重要的非線性結(jié)構(gòu),所描述的數(shù)據(jù)有明顯的層次關(guān)系,其中的每個元素只有一個前驅(qū),二叉樹是最為常用的數(shù)據(jù)結(jié)構(gòu),它的實際應(yīng)用非常廣泛,二叉樹的遍歷方式有三種,前序遍歷,中序遍歷,后序遍歷,先序遍歷的順序為:NLR先根結(jié)點,然后左子樹,右子樹;中序遍歷順序為;LNR先左子樹,然后根結(jié)點,右子樹;后序遍歷順序為:LRN先左子樹,然后右子樹,根結(jié)點。由前序和中序遍歷,有中序和后序遍歷序列可以唯一確定一棵二叉樹。對于給幾個數(shù)據(jù)的排序或在的幾個數(shù)據(jù)中進展查找,二叉樹均能提供一種十分有效的方法,比如在查找問題上,任何借助于比擬法查找長度為的一個序表的算法,都可以表示成一株二叉樹。反之,任何二叉樹都對應(yīng)一個查找有序表的有效方法根據(jù)樹的數(shù)學(xué)理論,對于算法分析的某些最有啟發(fā)性的應(yīng)用,是與給出用于計算各種類型中不同樹的數(shù)目的公式有關(guān)的。本文對二叉樹以與二叉樹的各種功能做介紹以與寫出一些根本的程序,讓我們對二叉樹的理解有更好的效果。關(guān)鍵詞:二叉樹的遍歷;左子樹;右子樹;遞歸文案大全目錄3333332.1數(shù)據(jù)結(jié)構(gòu)設(shè)計:33333總結(jié)3參考文獻3文案大全創(chuàng)建二叉樹并遍歷 根本要求: 該程序集成了如下功能:1二叉樹的建立2遞歸和非遞歸先序,中序和后序遍歷二叉樹3按層次遍歷二叉樹4交換二叉樹的左右子樹5輸出葉子結(jié)點6遞歸和非遞歸計算葉子結(jié)點的數(shù)目分先序遍歷,中序遍歷和后序遍歷三種情況考慮。1. 先序遍歷,當(dāng)二叉樹非空時按以下順序遍歷,否如此完畢操作: 訪問根結(jié)點; 按先序遍歷規(guī)如此遍歷左子樹; 按先序遍歷規(guī)如此遍歷右子樹;2. 中序遍歷,當(dāng)二叉樹非空時按以下順序遍歷,否如此完畢操作: 按中序遍歷規(guī)如此遍歷左子樹; 訪問根結(jié)點; 按中序遍歷規(guī)3遍歷右子樹。3. 后序遍歷,當(dāng)二叉樹非空時按以下順序遍歷,否如此完畢操作: 按后序遍歷規(guī)如此遍歷左子樹; 按后序遍歷規(guī)如此遍歷右子樹; 訪問根結(jié)點。對任意給定的二叉樹頂點數(shù)自定建立它的二叉鏈表存貯結(jié)構(gòu),并利用棧的五種根本運算清空堆棧、壓棧、彈出、取棧頂元素、判??諏崿F(xiàn)二叉樹的先序、中序、后序三種周游,輸出三種周游的結(jié)果。流程圖與結(jié)構(gòu)圖YESYESNONO圖1.1 流程圖2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計:1 二叉樹結(jié)點數(shù)據(jù)類型定義為: template <typename T> struct BiNode  BiNode<T>*rchild,*lchild;/指向左孩子的指針T data;/結(jié)點數(shù)據(jù)信息  2 二叉樹數(shù)據(jù)類型定義為: template <typename T> class BiTree  template <typename T> friend ostream & operator <<(ostream &os ,BiTree<T> &bt); public: BiTree();/無參構(gòu)造函數(shù) BiTree(int m);/有參空構(gòu)造函數(shù) BiTree(T ary,int num,T none);/有參構(gòu)造函數(shù)  BiTree();/析構(gòu)函數(shù) void preorder();/遞歸前序遍歷  void inorder();/遞歸中序遍歷  void postorder();/遞歸后續(xù)遍歷 void levelorder();/層序遍歷 int  count();/計算二叉樹的結(jié)點數(shù)  void display(ostream &os);/打印二叉樹,有層次  void LevelNum();/計算每一層結(jié)點數(shù)  void PreOrder();/非遞歸前序遍歷  void PostOrder();/非遞歸后序遍歷  void creat();/創(chuàng)建二叉樹 protected: /以下函數(shù)供上面函數(shù)調(diào)用  /對應(yīng)一樣功能 Voidcreat(BiNode<T>*&root);/創(chuàng)建  void release(BiNode<T>* &root);/刪除 BiNode<T> * Build(T ary,int num,T none,int idx);/用數(shù)組創(chuàng)建二叉樹  void PreOrder(BiNode<T>* root);/前序遍歷  void PostOrder(BiNode<T>* root);/后續(xù)遍歷  void LevelNum(BiNode<T>* root);/層序遍歷  void preorder(BiNode<T>* root);/遞歸前序遍歷  void inorder(BiNode<T>* root);/遞歸中序遍歷  void postorder(BiNode<T>* root);/遞歸后續(xù)遍歷  void levelorder(BiNode<T>*root);/層序遍歷  int count(BiNode<T>* root);/計算結(jié)點數(shù)   void display(ostream& os,BiNode<T>* root,int dep);/打印 static bool leastmanAncestor(BiNode<T> *root, T va, T vb, BiNode<T>                       private:BiNode<T> *rootptr; #include <iostream>using namespace std;/*/二叉樹結(jié)點類的定義template<class T>struct BTNodeT data; BTNode <T> * Lchild,*Rchild; BTNode(T nodeValue = T(),BTNode<T>* leftNode = NULL,BTNode<T>* rightNode = NULL ) :data(nodeValue),Lchild(leftNode),Rchild(rightNode) /可選擇參數(shù)的默認構(gòu)造函數(shù);/*/二叉樹的建立template <class T>void createBinTree(BTNode<T> * &root ) BTNode<T>* p = root; BTNode<T>* k; T nodeValue ; cin>>nodeValue; if(nodeValue=-1) root=NULL; else root=new BTNode<T>(); root->data = nodeValue; createBinTree(root->Lchild); createBinTree(root->Rchild); /*/二叉樹的先序遍歷template <class T>void preOrder( BTNode<T> * & p) if(p) cout<<p->data<<" " preOrder(p->Lchild); preOrder(p->Rchild); /*/二叉樹的中序遍歷template <class T>void inOrder(BTNode<T> * & p) if(p) inOrder(p->Lchild); cout<<p->data<<" " inOrder(p->Rchild); /*/二叉樹的后序遍歷template <class T>void levelOrder(BTNode<T> *& p) if(p) levelOrder(p->Lchild); levelOrder(p->Rchild); cout<<p->data<<" " /*/統(tǒng)計二叉樹中結(jié)點的個數(shù)template<class T>int countNode(BTNode<T> * & p) if(p = NULL) return 0; return 1+countNode(p->Lchild)+countNode(p->Rchild);/*/求二叉樹的深度template<class T>int depth(BTNode<T> *& p) if(p = NULL) return -1; int h1 = depth(p->Lchild); int h2 = depth(p->Rchild); if(h1>h2)return (h1+1); return h2+1;/*/二叉樹的消毀操作template<class T>BTNode<T>* destroy(BTNode<T>* p) /消毀函數(shù),用來消毀二叉樹中的各個結(jié)點 if(p) return destroy(p->Lchild); return destroy(p->Rchild); delete p; /*/主函數(shù)的設(shè)計int main () BTNode<int> * rootNode = NULL; int choiced = 0; while(true) system("cls"); cout<<"nnn -主界面-nnn" cout<<" 1、創(chuàng)建二叉樹 2、先序遍歷二叉樹n" cout<<" 3、中序遍歷二叉樹 4、后序遍歷二叉樹n" cout<<" 5、統(tǒng)計結(jié)點總數(shù) 6、查看樹深度 n" cout<<" 7、消毀二叉樹 0、退出nn" cout<<" 請選擇操作:" cin>>choiced; if(choiced = 0) return 0; else if(choiced = 1) system("cls"); cout<<"請輸入每個結(jié)點,回車確認,并以-1完畢:n" createBinTree(rootNode ); else if(choiced = 2) system("cls"); cout<<"先序遍歷二叉樹結(jié)果:n" preOrder(rootNode); cout<<endl; system("pause"); else if(choiced = 3) system("cls"); cout<<"中序遍歷二叉樹結(jié)果:n" inOrder(rootNode); cout<<endl; system("pause"); else if(choiced = 4) system("cls"); cout<<"后序遍歷二叉樹結(jié)果:n" levelOrder(rootNode); cout<<endl; system("pause"); else if(choiced = 5) system("cls"); int count = countNode(rootNode); cout<<"二叉樹中結(jié)點總數(shù)為"<<count<<endl; system("pause"); else if(choiced = 6) system("cls"); int dep = depth(rootNode); cout<<"此二叉樹的深度為"<<dep<<endl; system("pause"); else if(choiced = 7) system("cls"); cout<<"二叉樹已被消毀!n" destroy(rootNode); cout<<endl; system("pause"); else system("cls"); cout<<"nnnnnt錯誤選擇!n" 創(chuàng)建二叉樹:依次輸入二叉樹前序遍歷序列,構(gòu)建相應(yīng)的二叉樹。 二叉樹遍歷:遞歸算法、非遞歸算法測試,調(diào)用相應(yīng)函數(shù)進展測試,結(jié)果正確。 求二叉樹深度和結(jié)點數(shù):創(chuàng)建一個二叉樹,調(diào)用相關(guān)函數(shù),測試結(jié)果正確。 計算每層結(jié)點數(shù):調(diào)用levelNum()函數(shù),測試結(jié)果正確。  調(diào)試時遇到諸多問題,其中最主要的問題是死循環(huán)問題,在非遞歸遍歷時,容易進入死循環(huán),經(jīng)過查找資料、分步調(diào)試最終找到循環(huán)完畢條件,順利解決各個難題。1初始界面:主界面所包含的內(nèi)容2運行結(jié)果:進展操作1,輸入每個結(jié)點,顯示結(jié)果如下進展操作2,執(zhí)行結(jié)果如下:進展操作3,執(zhí)行結(jié)果如下:進展操作4,執(zhí)行結(jié)果如下:圖4.5二叉樹后序遍歷:進展操作5,執(zhí)行結(jié)果如下:進展操作6,執(zhí)行結(jié)果如下:總結(jié)要能很好的掌握編程,僅僅通過幾個簡單的程序的編寫時無法達成的,更需要大量積累和深入才可能通過本次課程設(shè)計。有關(guān)一個課題的所有知識不僅僅是在課本上,多查閱一些資料能夠更好的完成課題,這就需要一種能力,即自學(xué)能力。本次課程設(shè)計還讓我認識到自己的缺點。本次選的課題是二叉樹的遍歷,因為本學(xué)期所學(xué)的就是二叉樹等數(shù)據(jù)結(jié)構(gòu),所以認為比擬適合。剛開始認為會很簡單,但到后來就出現(xiàn)一些難以解決的問題,就像教師請教,并查閱相關(guān)資料。經(jīng)過慢慢的調(diào)試,最終測試成功。 這次課程設(shè)計讓我所學(xué)到的數(shù)據(jù)結(jié)構(gòu)知識發(fā)揮的淋漓盡致,而且還拓展了我的知識面,使我更加熟練的掌握各種方法。 總之,這次課程設(shè)計增強了我的自學(xué)能力,拓展了我的知識面,讓我對數(shù)據(jù)結(jié)構(gòu)更加了解。參考文獻1 嚴蔚敏吳偉民數(shù)據(jù)結(jié)構(gòu)(C語言版)清華大學(xué), 2009年9月2 譚浩強C程序設(shè)計(第三版)清華大學(xué) 2009年1月

注意事項

本文(大大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計二叉樹地遍歷)為本站會員(沈***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!