给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
1 class Solution: 2 def levelOrder(self, root: TreeNode) -> List[List[int]]: 3 levels= [] 4 if not root: 5 return levels 6 def helper(node ,level): 7 if len(levels)==level: 8 levels.append([]) 9 levels[level].append(node.val) 10 if node.left: 11 helper(node.left,level+1) 12 if node.right: 13 helper(node.right,level+1) 14 helper(root,0) 15 return levels
来源:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/er-cha-shu-de-ceng-ci-bian-li-by-leetcode/
非递归版本
1 class Solution: 2 def levelOrder(self, root: TreeNode) -> List[List[int]]: 3 if root == None: 4 return [] 5 queue1 = [root] 6 queue2 = [] 7 ret = [] 8 while queue1 or queue2: 9 if queue1: 10 tempRet = [] 11 while queue1: 12 tempNode = queue1.pop(0) 13 tempRet.append(tempNode.val) 14 if tempNode.left: 15 queue2.append(tempNode.left) 16 if tempNode.right: 17 queue2.append(tempNode.right) 18 ret.append(tempRet) 19 if queue2: 20 tempRet = [] 21 while queue2: 22 tempNode = queue2.pop(0) 23 tempRet.append(tempNode.val) 24 if tempNode.left: 25 queue1.append(tempNode.left) 26 if tempNode.right: 27 queue1.append(tempNode.right) 28 ret.append(tempRet) 29 return ret
2020-01-13 20:49:45