• 广度优先搜索 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;
        }
      }
    }
  • 相关阅读:
    周鸿祎笔录
    set multiset 集合实现众数的统计
    栈实现 汉诺塔 操作是否符合规范
    优先队列----解决排序问题
    字符串的应用(续一)
    优先队列 的实例(未完----待续)
    字符串的应用
    栈实现括号
    Jave垃圾回收算法
    Java 按代回收垃圾以及回收算法
  • 原文地址:https://www.cnblogs.com/LilyLiya/p/14245849.html
Copyright © 2020-2023  润新知