BFS和DFS兩種方式實現二叉樹的層序遍歷

2021-10-22 10:45:07 字數 1650 閱讀 4731

二叉樹的前序遍歷

二叉樹的中序遍歷

二叉樹的後序遍歷

二叉樹的層序遍歷

二叉樹的前序、中序、後序、層序遍歷【解法完整版】

三、總結

給你乙個二叉樹,請你返回其按層序遍歷得到的節點值。 (即逐層地,從左到右訪問所有節點)。

例如:給定二叉樹: [3,9,20,null,null,15,7],

3

/ \9 20

/ \

15 7

返回其層次遍歷結果:

[

[3],

[9,20],

[15,7]

]

廣度優先搜尋是從樹的根節點開始,沿著樹的寬度來遍歷樹的節點。如果所有節點均被訪問,則演算法中止。廣度優先搜尋通常採用佇列來輔助實現。

在題目中要求按照層序遍歷,實現逐層地從左向右訪問所有的結點。這正好符合廣度優先搜尋的策略。

我們可以立即想到普通廣度優先搜尋的模板:

vectorbfs(treenode* root)    

queueq;

q.push(root);

while(!q.empty())

if(node->right)

}return result;

}

但是,這裡返回的是乙個一維陣列,和題目要求的二維陣列不一致。因此,我們需要稍作修改,修改內容如下:

通過這種修改,確保每次迴圈時要處理的佇列中元素都是本層的元素。

複雜度分析:本題也可以使用深度優先搜尋來實現。

深度優先搜尋是採用棧或者遞迴來實現。(遞迴在系統內部也是基於棧來實現)

vector> levelorder(treenode* root) 

// index 是節點所在層的層索引

複雜度分析:了解廣度優先搜尋和深度優先搜尋的思想。

了解兩種實現的演算法模板,廣度優先搜尋通常使用佇列來實現,深度優先搜尋通常使用遞迴實現。

能夠根據題幹的要求,在模板的基礎上靈活調整。

417,BFS和DFS兩種方式求島嶼的最大面積

給定乙個包含了一些0和1的非空二維陣列grid 乙個島嶼是由一些相鄰的1 代表土地 構成的組合,這裡的 相鄰 要求兩個1必須在水平或者豎直方向上相鄰。你可以假設grid的四個邊緣都被0 代表水 包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0...

二叉樹DFS和BFS遍歷

public class treenode bfs廣度優先遍歷 使用queue實現bfs public void bfswithqueue treenode root dfs 深度優先遍歷 採用 遞迴棧 或者 棧 遞迴棧 dfs遞迴實現 public void dfswithrecursion tr...

兩種方式遍歷二叉樹 遞迴方式和非遞迴方式

用遞迴的方法遍歷二叉樹很簡單,但是非遞迴的遍歷二叉樹就比較困難了。在非遞迴方法中,我們需要棧stack的幫助。以下是分別用遞迴方式和非遞迴方式寫的前 中 後序遍歷二叉樹的方法,經過驗證結果是正確的。include include using namespace std struct node voi...