在學資料結構的時候,二叉樹通常有三種遍歷,分別是先序遍歷,中序遍歷,後序遍歷。這些遍歷其實都是深度優先遍歷的一種變形,因此都是使用遞迴來解決
然而二叉樹還有一種層序遍歷
就是每一層輸出節點
就拿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...