深度優先遍歷 和 廣度優先遍歷

2021-06-22 20:44:58 字數 1907 閱讀 9782

圖的廣度優先搜尋是樹的按層次遍歷的推廣,它的基本思想是:首先訪問初始點vi,並將其標記為已訪問過,接著訪問vi的所有未被訪問過的鄰接點 vi1,vi2, …, vi t,並均標記已訪問過,然後再按照vi1,vi2, …, vi t的次序,訪問每乙個頂點的所有未被訪問過的鄰接點,並均標記為已訪問過,依次類推,直到圖中所有和初始點vi有路徑相通的頂點都被訪問過為止。

二叉樹的深度優先遍歷的非遞迴的通用做法是採用棧,廣度優先遍歷的非遞迴的通用做法是採用佇列。

為了方便程式驗證,首先構造乙個如圖所示的二叉樹。

原始碼:/*************************** bintree.h檔案 *****************************/

#ifndef _bintree_h

#define _bintree_h

template

class cbintree

;treenode *m_pbintree;

};#endif

template

cbintree::cbintree()

template

bool cbintree::depth_rf() //先根深度遍歷

if (node_s.plchild != null)

}return true;

}template

bool cbintree::depth_rm() //中根深度遍歷

if (!s.empty())

}    

return true;

}template

bool cbintree::widthfs() //層次遍歷

if (pnode->prchild != null)

q.pop();  

}return true;

}/************************ main.cpp 檔案 ****************************/

#include

#include

#include

using namespace std;

#include "bintree.h"

int main()

/***************** 教科書標準演算法及優化演算法**)*******************/

1.先序遍歷非遞迴演算法

void preorderunrec(bitree *t)

if (!stackempty(s))         //通過下一次迴圈中的內嵌while實現右子樹遍歷

//endif

}//endwhile 

}2.中序遍歷非遞迴演算法

void inorderunrec(bitree *t)

if (!stackempty(s))

//endif   

}//endwhile

}3.後序遍歷非遞迴演算法

typedef enum tagtype;

typedef struct

stacknode;

typedef struct

sqstack;

void postorderunrec(bitree t)

while (!stackempty(s) && s.elem[s.top].tag==r)  

if (!stackempty(s))

}while (!stackempty(s));

}//postorderunrec

4.前序最簡潔非遞迴演算法

void preorderunrec(bitree *t)

}5.後序演算法之二

void bt_postordernorec(ptreet root)

else

else}}

}

廣度優先遍歷和深度優先遍歷

深度優先遍歷 廣度優先遍歷是圖的一種遍歷方式,它的思想就是遍歷這個點相鄰的所有的點,再對這些點進行廣度優先遍歷.如下圖所示 首先我們從a點開始遍歷,然後遍歷所有和a相鄰的點f和點g 然後對f和點g進行遍歷進行遍歷,得到點e,h,k和b 然後再繼續,知道所有的點都遍歷完成 首先,我們先定義圖graph...

廣度優先遍歷和深度優先遍歷

1.1 概念 以初始節點v0作為第一層節點,接著訪問它。然後迭代第一層節點即v0,訪問它相鄰接的沒有訪問過的節點比如v1,v2,v1,v2加入到第二層節點 迭代第二層節點v1,v2,v1,v2依次訪問相鄰接的沒有訪問過的節點,重複上述步驟直至所有節點都被訪問過為止。如圖所示首先訪問根節點v0,並將v...

深度優先遍歷和廣度優先遍歷

其實簡單來說 深度優先就是自上而下的遍歷搜尋 廣度優先則是逐層遍歷 對於演算法來說 無非就是時間換空間 空間換時間 深度優先不需要記住所有的節點,所以占用空間小,而廣度優先需要先記錄所有的節點占用空間大 深度優先有回溯的操作 沒有路走了需要回頭 所以相對而言時間會長一點 深度優先採用的是堆疊的形式,...