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

results matching ""

    No results matching ""