二叉樹按層遍歷 LEETCODE 102

2021-10-03 12:10:23 字數 1093 閱讀 2224

在學資料結構的時候,二叉樹通常有三種遍歷,分別是先序遍歷,中序遍歷,後序遍歷。這些遍歷其實都是深度優先遍歷的一種變形,因此都是使用遞迴來解決

然而二叉樹還有一種層序遍歷

就是每一層輸出節點

就拿leetcode 102這道題舉例子

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

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

3/ \

9 20

/ \

15 7

返回其層次遍歷結果:

[ [3],

[9,20],

[15,7]

]

一開始拿到這題也是挺棘手的,但是我們可以很明確知道既然是一層層來遍歷,就大概率不是遞迴來解決

我們需要對每一層都是從左往右來輸出

因此可以借助佇列這個資料結構

首先我們將根節點新增至佇列

然後pop出來,再判斷它是否有左孩子,如果有則新增至佇列,最後再判斷它是否有右孩子,如果有則新增至佇列

然後進行下一輪的pop,迴圈往復,直到佇列裡面沒有元素存在

這裡我是用python實現的一版**

class solution:

def levelorder(self, root: treenode) -> list[list[int]]:

levels =

if not root:

return levels

queue = [root]

level = 0

while queue:

level_length = len(queue)

for i in range(level_length):

popednode = queue.pop(0)

if popednode.left:

if popednode.right:

level += 1

return levels

這裡佇列實現我只是簡單拿了個列表來模擬

你也可以在collections庫里使用deque這個模組

按層遍歷二叉樹

include include typedef struct bitnodebitnode,bitree 定義二叉樹型別 typedef struct qnodeqnode,queueptr 建立鏈 typedef struct linkqueue 建立佇列 void enqueue linkque...

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

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

按層遍歷二叉樹的節點

大家都開始上班了吧?我春節在家準備了 5 篇面試題系列的文章,想著大家過節估計也沒興趣閱讀,所以節後再發。這些題目大都選自 leetcode,屬於簡單到中等型別的難度。還在糾結學演算法有沒有用的同學,請參閱 搞 ios 的學演算法有意義嗎?解題 都是使用 swift 完成的,我也盡量在 中使用了 s...