Algorithms 二叉樹的層次遍歷 廣度優先)

2021-10-02 16:13:35 字數 2506 閱讀 5937

我們上篇博文中 algorithms_二叉樹的前序遍歷、中序遍歷、後續遍歷(深度優先) ,本質上是深度優先。 為什麼這麼說呢? 我們來看下

5

/ \

36/ \ \ 248

前序遍歷: 5 、3、2、4、6、8

中序遍歷: 2、3、4、5、6、8

後序遍歷 : 2、4、3、8、6、5

不管是前序、中序還是後序都會先把左子樹遍歷到沒有元素,然後再遍歷右子樹到沒有元素, 都是先順著乙個枝杈往最深的地方走。

而層次遍歷呢? (廣度優先)

5         先遍歷第0層的資料

----

----

----

----

----

----

----

----

-------

/ \

36 然後遍歷第1層的資料

----

----

----

----

----

----

----

----

-------

/ \ \

248 再遍歷第2層的資料

----

----

----

----

----

----

----

----

----

---

層次遍歷的輸出如下: 5、3、6、2、4、8

我們遍歷的資料使用逐層遍歷的方式,本質上是一種廣度優先的遍歷。

層次遍歷的方式,通常使用的不是遞迴的方式來實現的,一般都會借用佇列。 從根節點開始排著隊的進入到佇列中

5         先遍歷第0層的資料

----

----

----

----

----

----

----

----

-------

/ \

36 然後遍歷第1層的資料

----

----

----

----

----

----

----

----

-------

/ \ \

248 再遍歷第2層的資料

----

----

----

----

----

----

----

----

----

---

我們逐步來分析一下

根節點不為空的話,將根節點5入隊

訪問根節點5 ,然後將 5 的 左右孩子 3 和 6 入隊 --------> 5

訪問左孩子3 ,這個時候判斷下 3是否有左右孩子,有的話將2和4 入隊 ------>5 3

這個時候佇列中有 6 、2、4 ,訪問6 ------> 5 3 6

看下6的左右孩子,有的話入隊,這個時候佇列中有 2 、4 、8

訪問 2 ,看下2還有沒有左右孩子,沒有 ------> 5 3 6 2

訪問 4 看下4 還有沒有左右孩子,沒有 ------> 5 3 6 2 4

訪問 8 看下8 還有沒有左右孩子,沒有 ------> 5 3 6 2 4 8

整個隊列為空,廣度優先遍歷結束。

/**

* *

* @title: levelscan

* * @description: 二分搜尋樹的層序遍歷

* *

* @return: void

*/public

void

levelscan()

if(currentnode.right != null)

}}

測試下

二叉樹的層序遍歷 二叉樹 BFS

給你乙個二叉樹,請你返回其按 層序遍歷 得到的節點值。即逐層地,從左到右訪問所有節點 示例 二叉樹 3,9,20,null,null,15,7 返回其層次遍歷結果 3 9,20 15,7 在用bfs迴圈遍歷時。先記錄現在佇列裡面的元素個數n,n就是此二叉樹這一深度擁有的節點數,然後迴圈n次,把n個節...

二叉樹層序遍歷 求二叉樹的層序遍歷

給定乙個二叉樹,返回該二叉樹層序遍歷的結果,從左到右,一層一層地遍歷 例如 給定的二叉樹是,該二叉樹層序遍歷的結果是 3 9,20 15,7 示例1 輸入 返回值 1 2 示例2輸入 返回值 1 2,3 4,5 解題思路 重點是如何把在一層的節點放到一起,設定乙個引數專門放一層的節點 class t...

二叉樹3 二叉樹按層遍歷列印

題目 有一棵二叉樹,請設計乙個演算法,按照層次列印這棵二叉樹。給定二叉樹的根結點root,請返回列印結果,結果按照每一層乙個陣列進行儲存,所有陣列的順序按照層數從上往下,且每一層的陣列內元素按照從左往右排列。保證結點數小於等於500。思路 對於二叉樹,除了先序遍歷 中序遍歷 後序遍歷之外,常用的遍歷...