Question
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,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
confused what “{1,#,2,3}” means? > read more on how binary tree is serialized on OJ.
Show Tags
Show Similar Problems
Have you met this question in a real interview? Yes No
Discuss
Analysis
using queue
Solution
Solution 1
using two list to store node in last and current level.fa
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param {TreeNode} root
# @return {integer[][]}
def levelOrder(self, root):
result = []
if root==None:
return result
Node = [root]
while Node!=[]:
lastLevel, curNode = [],[]
for temp in Node:
lastLevel.append(temp.val)
if temp.left!=None:
curNode.append(temp.left)
if temp.right!=None:
curNode.append(temp.right)
result.append(lastLevel)
Node = curNode
return result
Solution 2
Unlike solution 1, it uses one list and two flag to record the position in order to save storage.
class Solution:
# @param {TreeNode} root
# @return {integer[][]}
def levelOrder(self, root):
result = []
if root==None:
return result
queue = [root]
lastnum, curnum = 1, 0
while queue!=[]:
curresult, curnum = [], 0
while lastnum>0:
curresult.append(queue[0].val)
lastnum -= 1
if queue[0].left!=None:
queue.append(queue[0].left)
curnum += 1
if queue[0].right!=None:
queue.append(queue[0].right)
curnum += 1
queue = queue[1:]
lastnum = curnum
result.append(curresult)
return result