题目
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:
二叉树:[3,9,20,null,null,15,7],3
/ \
9 20
/ \
15 7
返回其层次遍历结果:[
[3],
[9,20],
[15,7]
]
通过次数126,438提交次数201,834来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
思路
树的层次遍历,主要就是采用队列的方式,在元素出队的时候,把该节点的孩子节点加到队列中来,然后有序的出队遍历就是层次遍历的结果。
层次遍历的模板代码如下:
def bfs(root:TreeNode):
queue = []
queue.append(root)
while (len(queue) != 0):
node = queue.pop()
if (node.left != None):
queue.append(node.left)
if (node.right != None):
queue.append(node.right)
但是这一题不仅仅是需要给出层次遍历的结果,还需要把遍历的结果按照层级来进行归类,所以这个时候就需要稍微变通一下,只需要在visit元素的时候先一股脑把目前队列里的元素给pop完,然后再添加进队列的元素就是下一层的所有元素,然后以此类推。这样就能保证在队列里的元素一定是属于同一个层级。
代码
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def levelOrder(self, root: TreeNode):
if root == None:
return []
visit_queue = []
return_list = []
visit_queue.append(root)
while(len(visit_queue) != 0):
n = len(visit_queue)
current_list = []
for i in range(n):
current_node = visit_queue.pop(0)
current_list.append(current_node.val)
if current_node.left != None:
visit_queue.append(current_node.left)
if current_node.right != None:
visit_queue.append(current_node.right)
return_list.append(current_list)
return return_list
if __name__ == '__main__':
#建树
root = TreeNode(-1)
node1 = TreeNode(0)
root.left = node1
node2 = TreeNode(3)
root.right = node2
node3 = TreeNode(-2)
node1.left = node3
node4 = TreeNode(4)
node1.right = node4
node5 = TreeNode(8)
node3.left = node5
solution = Solution()
result = solution.levelOrder(root)
print(result)
版权声明:本文为u010834867原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。