二叉樹的廣度優先搜尋

2021-08-07 16:56:12 字數 1040 閱讀 2278

使用兩個佇列存放節點元素,佇列1用來存放未遍歷過的節點,佇列2用來存放遍歷的節點。

具體步驟:

步驟:

(1)把根結點,放到佇列1中。見圖(a)

(2)彈出佇列1的中的隊首元素,被彈出的元素放到佇列2中。若該隊首元素有子節點,按從到右的順序加入到佇列1中。見圖(b)

(3)重複步驟2),見圖(c)~圖(h)

(4)整個過程結束。佇列2中的元素順序就是使用廣度優先搜尋方法所遍歷的順序。

#include 

#include

using

namespace

std;

struct node

;void bfs(int a, int size)

else

// 右子節點

child++;

if(child < size)

else

}// 先把第0個節點加到unvisited佇列中

unvisited.push(&nodes[0]);

while (!unvisited.empty())

if(null != current->right)

visited.push(current);

cout

<< current->data << " ";

}}int main(int argc, const

char * argv)

; int size = sizeof(a)/sizeof(int);

bfs(a, size);

return

0;}

執行結果:

0  1  2  3  4  5  6

廣度優先遍歷二叉樹

同學電面被問到乙個問題 如何獲得完全二叉樹的最後乙個節點?二叉樹以鍊錶的形式儲存。沒想到合適的辦法,用廣度遍歷吧,最後乙個節點就是了,如下 include include 樹節點的定義 struct tnode 佇列節點的定義 struct qnode 佇列的定義 struct queue 初始化佇...

二叉樹 廣度優先遍歷

廣度優先遍歷從最底層 或者最高層 開始,向下 或向上 逐層訪問每個節點,在每一層次上,從左到右 或從右到左 訪問每個節點。這樣就有4種訪問方式。當使用佇列時,這種遍歷方式的實現相當直接。假設從上到下 從左到右進行進行廣度優先遍歷。在訪問了乙個節點後,它的子節點 如果有的話 就放到佇列的末尾,然後訪問...

二叉樹構造 二叉樹的廣度優先遍歷

輸入一棵二叉樹的先序遍歷序列和中序遍歷序列,輸出它的廣度優先遍歷序列。第一行為乙個整數t 0為每個測試用例單獨一行輸出廣度優先遍歷序列。2dbacegf abcdefg bcad cbad dbeacgf bcad include include include using namespace st...