Bread First Search

Use Case

从图上某个点出发,找到其他所有点(整个图)

  • Traversal in Graph
    • Level Order Traversal
      • 层级遍历需要提前取size
    • Connected Component
      • 引入HashMap,因为可能存在环
    • Topological Sorting
  • Shortest Path in Simple Graph
    • 简单图求最短路径(即图中每条边长度都是1,且没有方向)

Summary

  • 复杂度O(n) (n个节点)或者O(m) (m条边),每个点只过一次
  • 空间复杂度O(n)

Template

  • using Queue

    • 需要分层的情况,多一个for循环,同时要记得提前取size

      public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
          ArrayList result = new ArrayList();
      
          if (root == null)
              return result;
      
          Queue<TreeNode> queue = new LinkedList<TreeNode>();
          queue.offer(root);
      
          while (!queue.isEmpty()) {
              ArrayList<Integer> level = new ArrayList<Integer>();
      
              //get the size first since size is changing
              int size = queue.size();
              for (int i = 0; i < size; i++) {
                  TreeNode head = queue.poll();
                  level.add(head.val);
                  // null check
                  if (head.left != null)
                      queue.offer(head.left);
                  if (head.right != null)
                      queue.offer(head.right);
              }
              result.add(level);
          }
      
          return result;
      }
      

Question

results matching ""

    No results matching ""