题目描述
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)加入null标记一层是否结束,使用队列来进行层次遍历 2)第一次加入【root,null】
如果出队列元素不是null,则将出栈元素的左孩子和右孩子加入队列中,重复直到遇到下一个null如果出栈的是null,则说明一层已经完了,需要删除第一个null字符,并新的一层后面加入null
3)如果经过输出之后第一个元素还是null,说明新的一层为空,即所有元素已经输出,结束循环
算法实现
class TreeNode():
def __init__(self
,x
):
self
.val
=x
self
.left
=None
self
.right
=None
class Solution():
def levelOrderTraversal(self
,root
):
res
=[]
queue
=[root
,'null']
while queue
[0]!='null':
temp
=[]
while queue
[0]!='null':
node
=queue
.pop
(0)
temp
.append
(node
.val
)
if node
.left
!=None:queue
.append
(node
.left
)
if node
.right
!=None:queue
.append
(node
.right
)
queue
.append
('null')
queue
.pop
(0)
if len(temp
)!=0:
res
.append
(temp
)
print(temp
)
return res
test
=Solution
()
n1
=TreeNode
(1)
n2
=TreeNode
(2)
n3
=TreeNode
(3)
n4
=TreeNode
(4)
n5
=TreeNode
(5)
n6
=TreeNode
(6)
n7
=TreeNode
(7)
n1
.left
=n2
n1
.right
=n3
n2
.left
=n4
n3
.left
=n5
n3
.right
=n6
n6
.right
=n7
"""
1
/ \
2 3
/ /\
4 5 6
\
7
"""
print(test
.levelOrderTraversal
(n1
))
小结
以层为基本单位,层之间的间隔为null,如果这一层没有全部出队列,则需要不断出队列,并把相应孩子节点加入到队列后面。直到遇到null说明这一层已经结束。
要删除上一层留下的null和添加下一层的null,如果新的层为空,说明已经没有元素了,此时可以退出程序,即所有层遍历结束的条件是队列中第一个元素为null。