從上往下打印出二叉樹(shù)的每個(gè)結(jié)點(diǎn),同一層的結(jié)點(diǎn)按照從左到右的順序打印。例如如下二叉樹(shù)打印出的結(jié)果為1、2、3、4、5、6、7、8、9。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),信陽(yáng)企業(yè)網(wǎng)站建設(shè),信陽(yáng)品牌網(wǎng)站建設(shè),網(wǎng)站定制,信陽(yáng)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,信陽(yáng)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
上面所說(shuō)的也就是二叉樹(shù)的層序遍歷,對(duì)于層序遍歷來(lái)說(shuō),首先訪問(wèn)的肯定是根節(jié)點(diǎn),然后是其左右結(jié)點(diǎn),之后就是左子樹(shù)的左右結(jié)點(diǎn)和右子樹(shù)的左右結(jié)點(diǎn),依次往下,如果使用像前中后序遍歷那樣按照左右結(jié)點(diǎn)去遞歸打印的話肯定是不行的,因?yàn)椴⒉荒芤恢毕仍L問(wèn)某個(gè)左結(jié)點(diǎn)或者右結(jié)點(diǎn),而是應(yīng)該左右交叉訪問(wèn);
上面的二叉樹(shù)中,打印的順序是1、2、3、4、5、6、7、8、9,可以想到按照隊(duì)列的方式依次將其放入其中,而先進(jìn)先出,得到的也就是打印的順序,至于如何存放,可以先將根結(jié)點(diǎn)放入其中,拿到隊(duì)首結(jié)點(diǎn),如果隊(duì)首結(jié)點(diǎn)的左右結(jié)點(diǎn)不為NULL,就依次放入隊(duì)列中,然后將隊(duì)首元素pop出,再循環(huán)取隊(duì)首元素進(jìn)行判斷放入......直至遍歷完二叉樹(shù)且隊(duì)列為空為止;
程序設(shè)計(jì)如下:
#include <iostream> #include <assert.h> #include <queue> using namespace std; struct BinaryTreeNode//二叉樹(shù)結(jié)點(diǎn)結(jié)構(gòu)體 { int _val; BinaryTreeNode *_Lnode; BinaryTreeNode *_Rnode; BinaryTreeNode(int val)//構(gòu)造函數(shù) :_val(val) ,_Lnode(NULL) ,_Rnode(NULL) {} }; BinaryTreeNode* _Create(int *arr, size_t& index, size_t size)//前序方式創(chuàng)建二叉樹(shù) { if((index < size) && (arr[index] != '#')) { BinaryTreeNode *root = new BinaryTreeNode(arr[index]); root->_Lnode = _Create(arr, ++index, size); root->_Rnode = _Create(arr, ++index, size); return root; } else return NULL; } BinaryTreeNode* CreateBinaryTree(int *arr, size_t size) { assert(arr && size); size_t index = 0; return _Create(arr, index, size); } void DestoryBinaryTree(BinaryTreeNode* root)//銷(xiāo)毀二叉樹(shù) { if(root != NULL) { DestoryBinaryTree(root->_Lnode); DestoryBinaryTree(root->_Rnode); delete root; root = NULL; } } void LevelOrderBinaryTree(BinaryTreeNode *root)//層序遍歷二叉樹(shù) { assert(root); queue<BinaryTreeNode*> q; q.push(root); while(!q.empty()) { if(q.front()->_Lnode != NULL) q.push(q.front()->_Lnode); if(q.front()->_Rnode != NULL) q.push(q.front()->_Rnode); cout<<q.front()->_val<<" "; q.pop(); } cout<<endl; } void PrevOrder(BinaryTreeNode* root)//前序遍歷二叉樹(shù),為了觀察二叉樹(shù)是否創(chuàng)建好 { if(root != NULL) { cout<<root->_val<<" "; PrevOrder(root->_Lnode); PrevOrder(root->_Rnode); } } int main() { int arr[] = {1,2,4,'#','#',5,8,'#','#','#',3,6,'#','#',7,'#',9,'#','#'}; BinaryTreeNode *root = CreateBinaryTree(arr, sizeof(arr)/sizeof(arr[0])); cout<<"PrevOrder: "; PrevOrder(root); cout<<endl; cout<<"LevelOrder: "; LevelOrderBinaryTree(root); DestoryBinaryTree(root); return 0; }
運(yùn)行程序:
《完》
分享名稱(chēng):從上往下打印二叉樹(shù)——23
轉(zhuǎn)載來(lái)源:http://aaarwkj.com/article12/ihhodc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航、標(biāo)簽優(yōu)化、網(wǎng)站策劃、做網(wǎng)站、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)