2023年實驗報告二叉樹求葉子結點數(shù)目_第1頁
2023年實驗報告二叉樹求葉子結點數(shù)目_第2頁
2023年實驗報告二叉樹求葉子結點數(shù)目_第3頁
2023年實驗報告二叉樹求葉子結點數(shù)目_第4頁
2023年實驗報告二叉樹求葉子結點數(shù)目_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

實驗葉子結點的計算姓名:XXX班級:XXX)學號:16130XXXXX時間2023.10.221問題描述二叉樹葉子節(jié)點的計算1.二叉樹的創(chuàng)建。2.二叉樹的圖形顯示3.二叉樹葉子節(jié)點的計算2結構設計二叉樹葉子結點的計算重要是二叉樹的創(chuàng)建,在這里選擇的存儲結構是一個鏈式存儲結構DataIchiIdrchild建立結構體structBTNode{◎intdata;BTNode*lchiId;。BTNode^rchiId;);3算法設計在程序正式編寫之前我定義了幾個功能函數(shù)(1)指針清空函數(shù),預定義一個指針bt使IchiId和rchiId的值分別賦予bt并且使其為空staticintcIear(BTNode*bt)。if(bt)。。clear(bt->lchiId);。clear(bt->rchild);coutVV"釋放了指針"V<bt?"所指向的空間"?endl;。deletebt;。1sreturn0;};(2)葉子結點計數(shù)算法葉子結點的特點是左孩子和右孩子均為空,運用這個特點可以輕松的判斷出是否是葉子節(jié)點,運用遞歸算法解決這個問題,預先定義一個計數(shù)器count當所遇結點滿足葉子結點的條件時,count+1staticintLeaf(BINode*p,int&count)(0if(p)(。if(p->lchild=NULL&&p->rchiId=NULL)count++;o。Leaf(p->IchiId,count);Leaf(p->rchiId,count);。)returncount;)(2)二叉樹的創(chuàng)建同樣是運用遞歸的方式,輸入?yún)?shù)涉及指針,左右判斷,以及判空條件staticintereate(BTNode*p,intk,intend)。BTNode*q;intx;。cin?x;if(x!=end)(3q二newBTNode;。q->data=x;q->lchiId=NULL;。q->rchild=NULL;。。if(k==1)p—>lchiId二q;if(k=2)p->rchild=q;?create(q,1,end);?create(q,2,end);。}sreturn0;};(3)類的構造函數(shù)創(chuàng)建樹并且輸入各結點數(shù)值在這里,采用的時先序遍歷法依次榆入樹中的各結點數(shù)值Step1:定義新的結構體指針,Step2:申請動態(tài)存儲空間;Step3:輸入節(jié)點元素,并且指針后移到輸入結點的后繼結點,end作為結點結束標志;Step4:反復環(huán)節(jié)3,直到輸入結束;voidBinaryTree::CreateBiTree(intend)cout<v”請按照先序序列的順序輸入二叉樹,7為空指針域標志:"<<endI;BTNode*p;intx;cin>>x;。if(x==end)return;。p=newBTNode:if(!p)0(cout<<"申請內(nèi)存失敗"<<endI;。exit(—1);)0p->data=x;p->IchiId=NULL;。p->rchiId二NULL;BT=p:create(p,1,end);create(p,2,end);}(4)按樹形圖輸出樹Step1:定義結點bt計數(shù)器IeveIStep2:當bt存在bt指向左孩子,leve1+1換行,輸出結點值Step3:bt指向右孩子IeveI+1輸出數(shù)值,依次遞歸voidBinaryTree::DispIayBTreeShape(BTNode*bt,intlevel)

。if(bt)。DisplayBTreeShape(bt->rchiId,IeveI4-1);。cout?endI;bfor(inti=0;i<level-1;i++)。cout?"3。cout?bt->data;oDispIayBTreeShape(bt->IchiId,Ievel+1);4程序運營測試/\/榆入該樹的先序遍歷1,2,3,(―1,-1),4(—1,-1),5,6(-1.-1)(-1)OQ

奇按任意鍵維埃?..

5調(diào)試記錄及收獲調(diào)試記錄:(1)在開始編譯過程中,,程序編譯不通過在case選擇中創(chuàng)建被直接跳過,仔細檢查過程中,,發(fā)現(xiàn)在類的調(diào)用過程中缺少了類的主體,在后期其余練習中同樣碰到了kidding錯誤,在后期的解決方法中在論壇上找到了解決方法及犯錯因素initializationof'XXX'isskippedby'case'IabeI因素及解決辦法原創(chuàng)2023年08月12日18:34:051461犯錯代碼段:switch(t)(case0:inta=0;break;default:break;}isskippedby編譯時提醒:"errorC2361:initializationofdefauIt'IabeI"。這怎么也許?isskippedby犯錯因素:C++約定,在塊語句中,對象的作用域從對象的聲明語句開始直到塊語句的結束,也就是說defauIt標號后的語句是可以使用對象a的。假如程序執(zhí)行時從switch處跳到default處,就會導致對象a沒有被對的地初始化。保證對象的初始化可是C++的重要設計哲學,所以編譯器會很嚴格地檢查這種違例情況,像上述的示例代碼中default語句后面并沒有使用a,但考慮到以后代碼的改動也許無意中使用,所以同樣被封殺。明白了因素,解決起來就很容易了。只要明確地限制對象a的作用域就行了。switch(t)(case0:{//addedforfixprobIemnta=0;break;1//addedforfixprobIemdefauIt:break;1解決方案在switch...case...結構中不能在case中定義新變量,for(inti=0;...)除非將定義新變量的case用塊{}包住,或者選擇將你的新變量在switch之前。例如可以將casefor(inti=0;i<n;i++))break;修改成如下即可:case:(for(inti=0;i<n;i++)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論