zoukankan      html  css  js  c++  java
  • 广度优先搜索 BFS

    1. 问题描述

    使用广度优先搜索遍历树,输出一个结果保存在数组中。

    2. 分析

    1. 加入新结点到队列中
    2. pop一个结点,加入到结果数组中
    3. append当前结点的所有孩子结点到队列中
    4. 重复2-3
    • 什么时候停?当队列中所有的结点都被pop完毕。

    3. 代码

    时间复杂度: O(V+E)

    空间复杂度: O(V) 当孩子结点都在Level 1 上的时候,我们需要把 V-1个孩子结点一起加入队列中。

    class Node:
        def __init__(self, name):
            self.children = []
            self.name = name
    
        def addChild(self, name):   //O(E) edges are the number of childern
            self.children.append(Node(name))
            return self
    
        def breadthFirstSearch(self, array):  // O(V) 
            queue = [self]
            while len(queue)>0:
                curr = queue.pop(0)
                array.append(curr.name) # append the curr.name, not just curr
                for child in curr.children:
                    queue.append(child)
            return array
    import java.util.*;
    
    class Program {
      static class Node {
        String name;
        List<Node> children = new ArrayList<Node>();
    
        public Node(String name) {
          this.name = name;
        }
    
        public List<String> breadthFirstSearch(List<String> array) {
          Queue<Node> queue = new LinkedList<Node>();
                queue.add(this);
                while(!queue.isEmpty()){
                    Node curr = queue.poll();
                    array.add(curr.name);
                    queue.addAll(curr.children);
                }
          return array;
        }
    
        public Node addChild(String name) {
          Node child = new Node(name);
          children.add(child);
          return this;
        }
      }
    }
  • 相关阅读:
    数据结构之线性顺序表ArrayList(Java实现)
    大话数据库技术之数据的检索
    JQuery表单元素过滤选择器
    字典序最小问题
    liferay中数据库表的解析未完
    转载如何实现portlet之间的传递参数
    SpringMVC学习笔记1
    深度优先搜索算法
    Ants-穷举算法
    三角形-穷举算法
  • 原文地址:https://www.cnblogs.com/LilyLiya/p/14245849.html
Copyright © 2011-2022 走看看