zoukankan      html  css  js  c++  java
  • Binary Tree Level Order Traversal 解答

    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]
    ]

    Solution -- Two Queues

    Classic solution for BFS problem is to use two queues. One for current level, and the other for next level. This method is to visit tree level by level. Time complexity is O(n), space cost is O(n), n is the number of nodes in tree.

    Deque (Java Interface)

    ArrayDeque (Java Class)

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public List<List<Integer>> levelOrder(TreeNode root) {
    12         List<List<Integer>> result = new ArrayList<List<Integer>>();
    13         if (root == null)
    14             return result;
    15         Deque<TreeNode> current = new ArrayDeque<TreeNode>();
    16         Deque<TreeNode> next;
    17         TreeNode tmpNode;
    18         current.addLast(root);
    19         while (current.size() > 0) {
    20             // Refresh next queue
    21             next = new ArrayDeque<TreeNode>();
    22             List<Integer> tmpList = new ArrayList<Integer>();
    23             while (current.size() > 0) {
    24                 tmpNode = current.pop();
    25                 if (tmpNode.left != null)
    26                     next.addLast(tmpNode.left);
    27                 if (tmpNode.right != null)
    28                     next.addLast(tmpNode.right);
    29                 tmpList.add(tmpNode.val);
    30             }
    31             // Refresh prev queue
    32             current = next;
    33             result.add(tmpList);
    34         }
    35         return result;
    36     }
    37 }

     Simplied version

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    from collections import deque
    
    class Solution:
        def levelOrder(self, root: TreeNode) -> List[List[int]]:
            result = []
            if not root:
                return result
            queue = deque()
            queue.append(root)
            while queue:
                level = []
                size = len(queue)
                for i in range(size):
                    node = queue.popleft()
                    level.append(node.val)
                    if node.left:
                        queue.append(node.left)
                    if node.right:
                        queue.append(node.right)
                result.append(level)
            return result
  • 相关阅读:
    Linux基础命令:crontab
    linux基础命令:su和sudo
    Linux基础知识:文件权限管理以及umask
    Linux基础命令:useradd和groupadd
    Linux基础命令:more和less
    Linux基础命令:ln
    Linux基础命令:chattr和lsattr
    Linux基础命令:who和w
    vue项目1-pizza点餐系统6-路由精讲之复用router-view
    vue项目1-pizza点餐系统5-全局守卫
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4834085.html
Copyright © 2011-2022 走看看