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,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
OJ's Binary Tree Serialization: The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / \ 2 3 / 4 \ 5
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".
递归解法
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
res = []
if not root:
return res
self.traversal(root, 0, res)
return res
def traversal(self, root, level, res):
if not root:
return
if len(res) < level + 1:
res += [],
res[level] += root.val,
self.traversal(root.left,level + 1, res)
self.traversal(root.right, level + 1, res)
非递归解法
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
from collections import deque
res, crt = [], []
if not root:
return res
q = deque([root,"eol"])
while q:
node = q.popleft()
if node == "eol":
if crt:
q.append("eol")
res += crt,
crt = []
continue
crt += node.val,
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
return res