二叉樹的前序遍歷
二叉樹的中序遍歷
二叉樹的後序遍歷
二叉樹的層序遍歷
二叉樹的前序、中序、後序、層序遍歷【解法完整版】
三、總結
給你乙個二叉樹,請你返回其按層序遍歷得到的節點值。 (即逐層地,從左到右訪問所有節點)。
例如:給定二叉樹: [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...