資源描述:
《實(shí)驗(yàn)報(bào)告二叉樹求葉子結(jié)點(diǎn)數(shù)目》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、實(shí)驗(yàn)葉子結(jié)點(diǎn)的計(jì)算姓名:xxx班級(jí):xxx)學(xué)號(hào):16130xxxxx時(shí)間2017.10.221問題描述二叉樹葉子節(jié)點(diǎn)的計(jì)算1.二叉樹的創(chuàng)建2.二叉樹的圖形顯示3.二叉樹葉子節(jié)點(diǎn)的計(jì)算2結(jié)構(gòu)設(shè)計(jì)二叉樹葉子結(jié)點(diǎn)的計(jì)算主要是二叉樹的創(chuàng)建,在這里選擇的存儲(chǔ)結(jié)構(gòu)是一個(gè)鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)Datalchildrchild建立結(jié)構(gòu)體structBTNode{intdata;BTNode*lchild;BTNode*rchild;};3算法設(shè)計(jì)在程序正式編寫之前我定義了幾個(gè)功能函數(shù)(1)指針清空函數(shù),預(yù)定義一個(gè)指針bt使lchild和rchild的值分別賦予bt并且使其為空sta
2、ticintclear(BTNode*bt){if(bt){clear(bt->lchild);clear(bt->rchild);cout<<"釋放了指針"<lchild==NULL&&
3、p->rchild==NULL)count++;Leaf(p->lchild,count);Leaf(p->rchild,count);}returncount;}(1)二叉樹的創(chuàng)建同樣是利用遞歸的方式,輸入?yún)?shù)包括指針,左右判斷,以及判空條件staticintcreate(BTNode*p,intk,intend){BTNode*q;intx;cin>>x;if(x!=end){q=newBTNode;q->data=x;q->lchild=NULL;q->rchild=NULL;if(k==1)p->lchild=q;if(k==2)p->rchild=
4、q;create(q,1,end);create(q,2,end);}return0;};(2)類的構(gòu)造函數(shù)創(chuàng)建樹并且輸入各結(jié)點(diǎn)數(shù)值在這里,采用的時(shí)先序遍歷法依次輸入樹中的各結(jié)點(diǎn)數(shù)值Step1:定義新的結(jié)構(gòu)體指針,Step2:申請(qǐng)動(dòng)態(tài)存儲(chǔ)空間;Step3:輸入節(jié)點(diǎn)元素,并且指針后移到輸入結(jié)點(diǎn)的后繼結(jié)點(diǎn),end作為結(jié)點(diǎn)結(jié)束標(biāo)志;Step4:重復(fù)步驟3,直到輸入結(jié)束;voidBinaryTree::CreateBiTree(intend){cout<<"請(qǐng)按照先序序列的順序輸入二叉樹,-1為空指針域標(biāo)志:"<>x;
5、if(x==end)return;p=newBTNode;if(!p){cout<<"申請(qǐng)內(nèi)存失敗"<data=x;p->lchild=NULL;p->rchild=NULL;BT=p;create(p,1,end);create(p,2,end);}(1)按樹形圖輸出樹Step1:定義結(jié)點(diǎn)bt計(jì)數(shù)器levelStep2:當(dāng)bt存在bt指向左孩子,level+1換行,輸出結(jié)點(diǎn)值Step3:bt指向右孩子level+1輸出數(shù)值,依次遞歸voidBinaryTree::DisplayBTreeShape(BTNode*bt,
6、intlevel){if(bt){DisplayBTreeShape(bt->rchild,level+1);cout<data;DisplayBTreeShape(bt->lchild,level+1);}}5214程序運(yùn)行測(cè)試643輸入該樹的先序遍歷1,2,3,(-1,-1),4(-1,-1),5,6(-1.-1)(-1)5調(diào)試記錄及收獲調(diào)試記錄:(1)在開始編譯過程中,,程序編譯不通過在case選擇中創(chuàng)建被直接跳過,仔細(xì)檢查過程中,,發(fā)現(xiàn)在類的調(diào)用過程中
7、缺少了類的主體,在后期其余練習(xí)中同樣碰到了kidding錯(cuò)誤,在后期的解決方法中在論壇上找到了解決方法及出錯(cuò)原因initializationof'XXX'isskippedby'case'label原因及解決辦法原創(chuàng)2013年08月12日18:34:051461出錯(cuò)代碼段:switch(t){case0:inta=0;break;default:break;}編譯時(shí)提示:“errorC2361:initializationof'a'isskippedby'default'label”。這怎么可能?出錯(cuò)原因:C++約定,在塊語句中,對(duì)象的作用域從對(duì)象的聲明語句
8、開始直到塊語句的結(jié)束,也就是說default標(biāo)號(hào)后的