深度優(yōu)先搜索
C++的實(shí)現(xiàn)
定義一個(gè)結(jié)構(gòu)體來(lái)表達(dá)一個(gè)NODE的結(jié)構(gòu):
structNode{intself;//數(shù)據(jù) Node*left;//左節(jié)點(diǎn) Node*right;//右節(jié)點(diǎn) };
那么我們?cè)谒阉饕粋€(gè)樹(shù)的時(shí)候,從一個(gè)節(jié)點(diǎn)開(kāi)始,能首先獲取的是它的兩個(gè)子節(jié)點(diǎn)。例如:
“ A B C D E F G ”
A是第一個(gè)訪問(wèn)的,然后順序是B和D、然后是E。然后再是C、F、G。那么我們?cè)趺磥?lái)保證這個(gè)順序呢?
這里就應(yīng)該用堆棧的結(jié)構(gòu),因?yàn)槎褩J且粋€(gè)先進(jìn)后出的順序。通過(guò)使用C++的STL,下面的程序能幫助理解:
constintTREE_SIZE=9;std::stackunvisited;Nodenodes[TREE_SIZE];Node*current;//初始化樹(shù)for(inti=0;i<TREE_SIZE;i++){nodes[i].self=i;intchild=i*2+1;if(child<TREE_SIZE)// Left childnodes[i].left=&nodes[child];elsenodes[i].left=NULL;child++;if(childright!=NULL)unvisited.push(current->right);// 把右邊壓入 因?yàn)橛疫叺脑L問(wèn)次序是在左邊之后if(current->left!=NULL)unvisited.push(current->left);cout<self<<endl;}
參見(jiàn)
廣度優(yōu)先搜索
免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請(qǐng)告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫的作者,感謝每一位的分享。
相關(guān)資料
展開(kāi)- 有價(jià)值
- 一般般
- 沒(méi)價(jià)值
{{item.userName}} 舉報(bào)
{{item.time}} {{item.replyListShow ? '收起' : '展開(kāi)'}}評(píng)論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}
{{_reply.userName}} 舉報(bào)
{{_reply.time}}