zoukankan      html  css  js  c++  java
  • 树-广度优先(图)

    310. 最小高度树
    对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点。
    
    格式
    
    该图包含 n 个节点,标记为 0 到 n - 1。给定数字 n 和一个无向边 edges 列表(每一个边都是一对标签)。
    
    你可以假设没有重复的边会出现在 edges 中。由于所有的边都是无向边, [0, 1]和 [1, 0] 是相同的,因此不会同时出现在 edges 里。
    
    示例 1:
    
    输入: n = 4, edges = [[1, 0], [1, 2], [1, 3]]
    
            0
            |
            1
           / 
          2   3 
    
    输出: [1]
    只要找到最长的那条路径,返回最中间位置的节点即可。
    
    我们将路径记录到graph这个dict中
    
    然后从所有叶子节点开始BFS,
    从节点i到达下一个节点j时,
        我们直接从graph[j]中将前一个节点i移除,
        然后判断j的剩余连接数,如果大于1,
            则表明我们当前所在树枝不是节点j连接的最长树枝,
            因为越短的枝,越早到达交汇处
            我们终止遍历,将此树枝舍弃掉
        如果连接数为1,
            则表明我们当前所在的树枝,有可能是最长的那个
            将j添加到下一轮的遍历中
    最后,我们找不到下一轮的节点了
    至此我们已经树上的所有节点遍历完成
    返回这轮的所有节点即可
    
    作者:vzp
    链接:https://leetcode-cn.com/problems/minimum-height-trees/solution/python3-bfs-ti-jie-by-vzp/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    View Code
    class Solution:
        def findMinHeightTrees(self, n: int, edges: List[List[int]]) -> List[int]:
            graph = collections.defaultdict(set)
            for p, q in edges:
                graph[p].add(q)
                graph[q].add(p)
    
            nodes = []
            for i in range(n):
                if len(graph[i]) < 2:
                    nodes.append(i)
    
            while True:
                temp = []
                for i in nodes:
                    for j in graph[i]:
                        graph[j].remove(i)
                        if len(graph[j]) == 1:
                            temp.append(j)
                if not temp:
                    return nodes
                nodes = temp
    View Code
  • 相关阅读:
    正确使用Core Data多线程的3种方式
    iOS开发周报:新一代 iPhone 可能取消耳机插口,Facebook 发布 tvOS SDK
    Atomic:Android、iOS和网页的设计工具
    iOS应用架构谈(三):View层的组织和调用方案(下)
    SQL server 2008数据库的备份与还原(转)
    重定向技术
    Python 正则表达式应用【转载】
    Fidder 工具使用
    HTTP请求大全
    RobotFramework环境搭建
  • 原文地址:https://www.cnblogs.com/topass123/p/13379910.html
Copyright © 2011-2022 走看看