【LeetCode每天一题】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 # Definition for a binary tree node.
2 # class TreeNode(object):
3 # def __init__(self, x):
4 # self.val = x
5 # self.left = None
6 # self.right = None
7
8 class Solution(object): 9 def levelOrder(self, root): 10 """
11 :type root: TreeNode 12 :rtype: List[List[int]] 13 """
14 if not root: 15 return [] 16 res = [] # 结果列表 17 stack = [root] # 栈存当前层中的节点 18 while stack: # 当栈为空时,说明遍历结束 19 tem, count = [], len(stack) # tem存储当前层次的节点值,count存储当前层次的节点数。 20 for _ in range(count): 遍历count次 21 node = stack.pop(0) # 从列表中第一个节点进行弹出, 并判断左右节点是否为空,进行相应的添加操作。 22 if node.left: 23 stack.append(node.left) 24 if node.right: 25 stack.append(node.right) 26 tem.append(node.val) # 将当前层所有节点值记录到结果中中 27 res.append(tem) 28 return res

更多精彩