層序遍歷(廣度優先遍歷)

2021-10-04 22:43:07 字數 2644 閱讀 6448

遍歷複雜度o(n)

#include

#include

using

namespace std;

// 二分搜尋樹

template

<

typename key,

typename value>

class

bst}

; node *root;

// 根節點

int count;

// 樹中的節點個數

public

:// 建構函式, 預設構造一棵空二分搜尋樹

bst(

)// 析構函式, 釋放二分搜尋樹的所有空間

~bst()

// 返回二分搜尋樹的節點個數

intsize()

// 返回二分搜尋樹是否為空

bool

isempty()

// 向二分搜尋樹中插入乙個新的(key, value)資料對

void

insert

(key key, value value)

// 檢視二分搜尋樹中是否存在鍵key

bool

contain

(key key)

// 在二分搜尋樹中搜尋鍵key所對應的值。如果這個值不存在, 則返回null

value*

search

(key key)

// 二分搜尋樹的前序遍歷

void

preorder()

// 二分搜尋樹的中序遍歷

void

inorder()

// 二分搜尋樹的後序遍歷

void

postorder()

// 二分搜尋樹的層序遍歷

void

levelorder()

}private

:// 向以node為根的二分搜尋樹中, 插入節點(key, value), 使用遞迴演算法

// 返回插入新節點後的二分搜尋樹的根

node*

insert

(node *node, key key, value value)

if( key == node-

>key )

node-

>value = value;

else

if( key < node-

>key )

node-

>left =

insert

( node-

>left , key, value)

;else

// key > node->key

node-

>right =

insert

( node-

>right, key, value)

;return node;

}// 檢視以node為根的二分搜尋樹中是否包含鍵值為key的節點, 使用遞迴演算法

bool

contain

(node* node, key key)

// 在以node為根的二分搜尋樹中查詢key所對應的value, 遞迴演算法

// 若value不存在, 則返回null

value*

search

(node* node, key key)

// 對以node為根的二叉搜尋樹進行前序遍歷, 遞迴演算法

void

preorder

(node* node)

}// 對以node為根的二叉搜尋樹進行中序遍歷, 遞迴演算法

void

inorder

(node* node)

}// 對以node為根的二叉搜尋樹進行後序遍歷, 遞迴演算法

void

postorder

(node* node)

}// 釋放以node為根的二分搜尋樹的所有節點

// 採用後續遍歷的遞迴演算法

void

destroy

(node* node)}}

;// 測試二分搜尋樹的前中後序遍歷以及層序遍歷

intmain()

cout

cout<<

"size: "

cout<<

"preorder: "

preorder()

; cout

cout<<

"inorder: "

inorder()

; cout

cout<<

"postorder: "

postorder()

; cout

cout<<

"levelorder: "

levelorder()

; cout

}

二分搜尋樹5 廣度優先遍歷(層序遍歷)

引入佇列的概念 將28入隊,佇列不為空,將隊首28元素取出,輸出,將其左右兩個節點入隊 16 30 將隊首16元素取出,輸出,將其左右兩個節點入隊 30 13 22 將隊首30元素取出,輸出,將其左右兩個節點入隊 13 22 29 42 迴圈這樣的操作,直到隊列為空 結果 28 16 30 13 2...

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

用棧進行儲存元素。訪問頂點 頂點入棧,以便記住它 標記頂點,以便不會再訪問它 2 訪問規則 a.如果可能,訪問乙個鄰接的未訪問頂點,標記它,併入棧。b.當不能執行a時 沒有鄰接的未訪問頂點 如果棧不為空,就從棧中彈出乙個頂點。c.如果不能執行規則a和b,就完成了整個搜尋過程。3 實現 基於以上規則,...

廣度優先遍歷

廣度優先遍歷 breadth first search 類似於對樹的層序遍歷 遍歷規則為 首先訪問初始點vi,並將其標記為已訪問過,接著訪問vi的所有未被訪問過的鄰接點,其訪問次序可以任意,假定依次為vi1,vi2,vit,並均標記為已訪問過,然後在按照vi1,vi2,vit的次序,訪問每乙個頂點的...