Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
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]
]
Solution
Queue
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
class Solution:
"""
@param root: The root of binary tree.
@return: Level order in a list of lists of integers
"""
def levelOrder(self, root):
# write your code here
if root == None:
return []
result = []
queue = collections.deque([root])
while queue:
level = []
for i in range(len(queue)): #how many nodes in current level.
header = queue.popleft()
level.append(header.val) #常犯错误就是加入整个对象而不是值。
if header.left:
queue.append(header.left)
if header.right:
queue.append(header.right)
result.append(level)
return result
DFS
private List<IList> resint = new List<IList>();
public IList<IList> LevelOrder2(TreeNode root)
{
LevelOrderHelper(root, 0);
return resint;
}
private void LevelOrderHelper(TreeNode root, int height)
{
if (root == null) return;
if (height == resint.Count)
{
resint.Add(new List());
}
resint[height].Add(root.val);
LevelOrderHelper(root.left, height + 1);
LevelOrderHelper(root.right, height + 1);
}