【数据结构】树形结构所有路径复原为链表

这篇具有很好参考价值的文章主要介绍了【数据结构】树形结构所有路径复原为链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 树形结构可视化

2. 树形结构转为链表


此目标是要还原树形结构的所有路径。树形结构是一种常见的数据结构,它表示元素之间层次关系。在树形结构中,每个节点可能拥有一个或多个子节点,形成了一个分层的结构。为了还原树形结构的路径,我们需要找到从根节点到每个叶节点的所有可能路径。这可以通过深度优先搜索或广度优先搜索来实现。通过遍历树形结构,我们可以收集所有路径,从而完整地还原出整个树形结构。这些路径可以用于各种应用,例如路径规划、图形可视化等。因此,还原树形结构的所有路径是一项重要任务。

1. 树形结构可视化

import networkx as nx  # pip install networkx
import matplotlib.pyplot as plt

# 构造树结构
tree = nx.Graph()

# 单条边添加
# tree.add_edge('1', '2')
# tree.add_edge('1', '3')
# tree.add_edge('2', '4')
# tree.add_edge('3', '5')
# tree.add_edge('5', '6')
# tree.add_edge('5', '7')

# 批量边添加
lst = [(1, 2), (2, 3), (3, 4), (3, 5), (3, 6), (4, 7), (5, 8), (6, 9), (7, 10), (8, 11), (9, 12), (10, 13), (11, 13), (12, 13), (13, 14)]
tree.add_edges_from(lst)

# 可视化树结构
pos = nx.spring_layout(tree)
nx.draw(tree, pos, with_labels=True, node_size=50, font_size=10)
plt.show()

结果为:

【数据结构】树形结构所有路径复原为链表,Algorithm,python,开发语言

2. 树形结构转为链表

from collections import defaultdict
from pprint import pprint


def tree_to_linked_lists(node, nodes):
    if node not in nodes:
        return [[node]]
    linked_lists = []
    for child in nodes[node]:
        linked_lists.extend(tree_to_linked_lists(child, nodes))
    return [[node] + sub_list for sub_list in linked_lists]


def get_different_endings_sequence(root, transitions):
    nodes = defaultdict(list)
    for transition in transitions:
        parent, child = transition
        nodes[parent].append(child)
    print(nodes)
    linked_lists = tree_to_linked_lists(root, nodes)
    return linked_lists


if __name__ == "__main__":
    # 定义树型转移序列
    root = 1
    transitions = [(1, 2), (2, 3), 
                   (3, 4), (3, 5), (3, 6), 
                   (4, 7), (5, 8), (6, 9), 
                   (7, 10), (8, 11), (9, 12), 
                   (10, 13), (11, 13), (12, 13), 
                   (13, 14)]

    result = get_different_endings_sequence(root, transitions)
    pprint(result)
    """
    defaultdict(<class 'list'>, {1: [2], 2: [3], 3: [4, 5, 6], 4: [7], 5: [8], 6: [9], 7: [10], 8: [11], 9: [12], 10: [13], 11: [13], 12: [13], 13: [14]})
    
    [[1, 2, 3, 4, 7, 10, 13, 14],
    [1, 2, 3, 5, 8, 11, 13, 14],
    [1, 2, 3, 6, 9, 12, 13, 14]]
    """

代码中的 tree_to_linked_lists 函数是一个递归函数,它不断地调用自己来处理子节点。对于每个节点,函数会检查它是否存在于 nodes 字典中。如果不存在,说明该节点是叶节点,函数返回一个只包含该节点的列表。如果存在,函数会遍历该节点的所有子节点,并对每个子节点调用 tree_to_linked_lists 函数。函数返回的列表是所有路径的列表,每个路径都是从根节点到叶节点的节点列表。 文章来源地址https://www.toymoban.com/news/detail-737472.html

到了这里,关于【数据结构】树形结构所有路径复原为链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 超大量数据,前端树形结构展示

    后端返回了50万数据,让前端一次性展示成树,之前用的ant-design-vue的tree插件,卡的死死的,经过大量实验,现发现三种树可以支持如此大数量的数据。 目录 第一种:vue-easy-tree 使用方式: 1.安装插件 2.引入插件 全局引入 组件引入 3.使用  在使用虚拟滚动时,必须设置 no

    2024年01月21日
    浏览(29)
  • 数据结构 C语言 树形结构 简单目录管理系统

    在图书、操作系统文件夹、学生等管理系统中,目录管理是必要环节,如何高效搜寻与低复杂度存储是实现这一环节的关键性问题。本课程设计需完成一种基于多叉树结构简单目录管理系统,该系统能以交互式界面进行创建目录、删除目录、查找目录、修改目录、层次遍历目

    2024年02月07日
    浏览(39)
  • 数据结构 C语言 树形结构 简单目录管理系统

    在图书、操作系统文件夹、学生等管理系统中,目录管理是必要环节,如何高效搜寻与低复杂度存储是实现这一环节的关键性问题。本课程设计需完成一种基于多叉树结构简单目录管理系统,该系统能以交互式界面进行创建目录、删除目录、查找目录、修改目录、层次遍历目

    2024年02月04日
    浏览(36)
  • c语言数据结构——树形结构之树和二叉树

    二叉树有什么用? 二叉树应用非常广泛。 在操作系统源程序中,树和森林被用来构造文件系统。我们看到的window和linux等文件管理系统都是树型结构。在编译系统中,如C编译器源代码中,二叉树的中序遍历形式被用来存放C 语言中的表达式。其次二叉树本身的应用也非常多,

    2023年04月18日
    浏览(33)
  • java返回前端树形结构数据(2种实现方式)

    0.思想 首先找到一级目录(类别),然后从一级目录(类别)递归获取所有子目录(类别),并组合成为一个“目录树” 1.普通实现:controller层传的是0层,就是一级目录层,从这里开始往下递归。 2.stream流实现: 3.实体类集合专VO类集合的工具类 入参为未知类型的实体集合

    2024年02月04日
    浏览(25)
  • Java8 Stream流处理树形结构数据

    参考资料 Java8新特性-使用Stream流递归实现遍历树形结构 ID为2,6,11的Menu 是 ID为1的Menu子节点 ID为3,4,5的Menu 是 ID为2的Menu子节点 💥 注意 是下面这种写法的一种更简单的写法

    2024年02月01日
    浏览(42)
  • 数据库树形结构怎么查 四种方法解决

    1.使SQL实现树形查询 1.1 树形结构固定,即固定几层结构,可以采用数据库连接查询,这里以两张表为例: 2.2 树形结构可能变化,采用数据库的递归进行查询 2.Java代码实现 1.递归查询数据库 2.一次性全部查询出来,用Java代码实现数据的树形分解 注:以上Java代码粘贴自网络

    2024年02月14日
    浏览(26)
  • 【前后端的那些事】开源!treeSelect树形结构数据展示

    前言 :最近写项目,发现了一些很有意思的功能,想写文章,录视频把这些内容记录下。但这些功能太零碎,如果为每个功能都单独搭建一个项目,这明显不合适。于是我想,就搭建一个项目,把那些我想将的小功能全部整合到一起。实现 搭一次环境 ,处处使用。 本文主要

    2024年02月01日
    浏览(28)
  • 微信小程序多列下拉框的实现(树形数据结构和单数组数据结构形式)

    利用微信小程序api,实现不同传输数据格式下的多列下拉框实现 首先了解一下picker中的事件 这里是官方文档,具体意思就是 当你滑动多列中的某一列的时候, bindcolumnchange 事件就会触发。当选择完毕点击确定的时候 bindchange 事件就会触发 微信小程序的多列下拉框是真的反人

    2024年02月07日
    浏览(39)
  • Element-UI控件Tree实现数据树形结构

            在前端开发中,有时会遇到所有菜单数据在同一级的情况,后端未对数据进行分级处理;但前端渲染需要是树状结构的数据,如何实现数据的树状化?将数组中通过父节点的ID与子节点的parentId关联,通过递归函数来实现。         前端框架这里使用element-ui的tree控件

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包