我的個人微信公衆號:Microstrong
微信公衆號ID:MicrostrongAI
微信公衆號介紹:Microstrong(小強)同學主要研究機器學習、深度學習、計算機視覺、智能對話系統相關內容,分享在學習過程中的讀書筆記!期待您的關注,歡迎一起學習交流進步!
知乎主頁:https://www.zhihu.com/people/MicrostrongAI/activities
102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
解題思路:
'''
思路:用隊列實現
1、root爲空,則返回空表
2、隊列不爲空,記下此時隊列中的結點個數length,length個結點出隊列的同時,記錄結點值,並把結點的左右子結點加入隊列
'''
from typing import List
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
# write your code here
res = []
# 如果根結點爲空,則返回空列表
if root is None:
return res
# 模擬一個隊列存儲節點
queue = []
# 首先將根節點入隊
queue.append(root)
# 列表爲空時,循環終止
while len(queue) != 0:
# 使用列表存儲同層節點
levelValue = []
# 記錄同層節點的個數
length = len(queue)
for i in range(length):
# 將同層節點依次出隊
temp = queue.pop(0)
# 非空左孩子入隊
if temp.left is not None:
queue.append(temp.left)
# 非空右孩子入隊
if temp.right is not None:
queue.append(temp.right)
levelValue.append(temp.val)
res.append(levelValue)
return res
if __name__ == "__main__":
root = TreeNode(3)
level1_left = TreeNode(9)
level1_right = TreeNode(20)
root.left = level1_left
root.right = level1_right
level2_left = TreeNode(15)
level2_right = TreeNode(7)
level1_right.left = level2_left
level1_right.right = level2_right
sol = Solution()
print(sol.levelOrder(root))
'''
Reference:
【1】https://blog.csdn.net/weixin_40314737/article/details/80942856
【2】https://blog.csdn.net/yurenguowang/article/details/76906620
'''