二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)
生活随笔
收集整理的這篇文章主要介紹了
二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二叉樹的層次遍歷同時涉及到樹和隊列兩種數據結構的操作,因此大廠很喜歡用來作為面試的熱身題。作者不少去騰訊的小伙伴,都反映,這種題一定要非常熟練,不然會被直接pass。
1 題目描述
給定一個二叉樹,按照層級進行遍歷,在每一層中,從左到右進行遍歷,并把每一層的元素放到一個數組中。
如下圖所示:
2 題目分析
本題中,我們需要一層一層進行樹節點的遍歷,對此, 我們可以使用廣度優先遍歷(BFS)來實現。
在遍歷一層時,我們同時需要將下一層的節點存儲起來,以便可以迭代遍歷。這時,用先進先出隊列來存儲就會非常的方便。
我們的算法遵循如下步驟:
- 1 將root放入隊列
- 2 迭代訪問隊列,直到隊列為空
- 3 在每次迭代時,首先確定隊列中元素個數,不妨稱為levelSize。表示在即將訪問的層次中共有levelSize個元素
- 4 依次訪問這levelSize個元素,將它們放入一個數組中,同時將它們從隊列中移除
- 5 移除每個元素時,講它的子節點加入隊列中
- 6 如果隊列非空,則回到3,繼續訪問下一層次的節點
動畫展示:
3 代碼實現
from collections import dequeclass TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
def traverse(root):
result = []
if root is None:
return result
queue = deque()
queue.append(root)
while queue:
levelSize = len(queue)
currentLevel = []
for _ in range(levelSize):
currentNode = queue.popleft()
# 將節點添加到數組中
currentLevel.append(currentNode.val)
# 將節點的子節點添加到隊列中
if currentNode.left:
queue.append(currentNode.left)
if currentNode.right:
queue.append(currentNode.right)
result.append(currentLevel)
return result
????????????????????????????????????????????往期精彩回顧
【送書!】最佳算法入門書籍
【面霸之路】雙指針和滑動窗口結合
雙指針問題最簡單的教程(1)
滑動窗口算法最簡單的教程(1)
總結
以上是生活随笔為你收集整理的二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 此项目与visual studio的当前
- 下一篇: 英特尔核芯显卡控制面板怎么找不到_【全球