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).

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);
        }

Last updated

Was this helpful?