1樓:迪倫少校
大體的思想是:從根節點出發先到左子樹,如果有子節點則繼續向下訪問,直到沒有孩子,則返回;再從左子樹根節點的右分支(如果有)訪問,按照同樣的規則進行。dfs的基本思想就是:
一路到底,只要有子樹,那就一直往深處訪問,而bfs則是按層次遍歷,訪問到一個節點時,就要訪問與這個節點同一層的所有節點。你自己找一個圖,對照書上的演算法自己畫畫,理解會深刻許多。
2樓:匿名使用者
建樹可以根據節點的值來遞迴進行。
如下是一個例子:
#include
#include
class treenode
~treenode()
};//將一個節點p加點樹curr中, 如果p的值小於當前節點就把它放到左子樹,否者右子樹
void addtotree(treenode *curr, treenode *p)
else addtotree(curr->left, p);
} else
else addtotree(curr->right, p);}}void printtree(treenode *p)void main() ;
treenode *root = new treenode(a[0]);
for(int i=1; i<5; i++)printtree(root); //中序周遊列印樹節點值。
delete root;}
資料結構 圖g的廣度、深度優先生成樹分別怎麼畫呀? 50
3樓:匿名使用者
1、首先第一步若節點右左子樹,則左鏈域lchild指示其左孩子(ltag=0),否則,令左鏈域指示其前驅(ltag=1)。若結點有右子樹,則右鏈域rchild指示其右孩子(rtag=0),否則,令右鏈域指示其後繼(rtag=1)。
3、最後幾是結點p的左指標域為空,則將其標誌位置為1,並使p->lchild指向中序前驅結點pre(即左線索化);結點pre的右指標域為空,則將其標誌位置為1,並使pre->rchild指向中序後繼結點p(即右線索化);將pre指向剛剛訪問過的結點p(即pre=p),線索化p的右子樹。
4樓:
深度優先生成樹 唯一嗎
如果給一圖,從一定點出發,那麼深度優先生成樹的畫法唯一嗎?也就是這個生成樹有左右之分嗎
這個不一定唯一,多數時候不唯一,如果某個頂點有多個未訪問的鄰接點,此時選擇不一樣的下一個點,結果都不一樣
但是對於深度優先的程式而言,因為已經限定了儲存結構和演算法步驟,此時結果才唯一
資料結構中搜尋有深度優先搜尋和廣度優先搜尋。深度中對應的回溯演算法,典型有八皇后問題,那麼廣度中是什
5樓:windows使用者
深度優先搜尋和廣度優先搜尋的目的都是圖的遍歷,回溯只是實現深搜的手段而已,並不是目的。深度優先搜尋適用於生成樹的層數少的情況,比如八皇后問題,廣度優先搜尋適用於生成樹寬度窄的情況。比如單源最短路問題。
6樓:雨落滿枝頭
你覺得5分有人回答你嗎。。
深度優先搜尋遍歷和廣度優先搜尋的遍歷序列及具體步驟和原因
格子裡兮 1 2 3 4 表示1可達到2,達到3,達到4 2 1 3 5 3 1 2 4 5 6 4 1 3 6 5 2 3 6 6 3 4 5 廣度優先搜尋就是把每一行按照順序輸出,去掉重複的,即先看1,有1,2,3,4,然後看2,因為有3,4了,所以只要5,然後看3,以此類推。一行行來。深度優先...
資料結構的問題 C,資料結構C 問題
include iostream.h include stdlib.h include stdio.h class lnode lnode lnode creatlist int n 建立鍊表 return h 返回你建立的鏈頭指標 鏈結到main中的附加頭結點上面 void lnode print...
c的資料結構問題(棧),資料結構有關棧的問題
亮 靜 define stack init size 100 c語言中定義乙個常量。stack init size 100 define stackincrement 10 c語言中定義乙個常量。stackincrement 10 include include 包含兩個標頭檔案。stdio.h和s...