我們上篇博文中 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。思路 對於二叉樹,除了先序遍歷 中序遍歷 後序遍歷之外,常用的遍歷...