当前位置: 首页 > news >正文

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

目录

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()

结果为:

2. 树形结构转为链表

from collections import defaultdict
from pprint import pprintdef 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 = transitionnodes[parent].append(child)print(nodes)linked_lists = tree_to_linked_lists(root, nodes)return linked_listsif __name__ == "__main__":# 定义树型转移序列root = 1transitions = [(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 函数。函数返回的列表是所有路径的列表,每个路径都是从根节点到叶节点的节点列表。 

http://www.lryc.cn/news/214840.html

相关文章:

  • linux杀毒软件下载、安装(在线安装、离线安装)
  • 系列五、映射文件xxxMapper.xml
  • 【缓存】Spring全家桶中@CacheEvict无效情况共有以下几种
  • P9117 [春季测试 2023] 涂色游戏
  • react如何进行项目配置代理
  • 2023杭州.云栖大会:计算,为了无法计算的价值
  • MIT6.5830 Lab1-GoDB实验记录(二)
  • 设计模式—创建型模式之工厂模式
  • N.B.缩略语的意思
  • SpringBoot源码透彻解析—自动装配
  • 基于springboot实现疫情防控期间外出务工人员信息管理系统项目【项目源码+论文说明】
  • 自动曝光算法(第一讲)
  • QStandardItemModel,setData和setItem区别
  • 应用出海新福祉,融云助IM社交迅速对齐海外用户体验
  • 64T存储松下mov和索尼mp4文件变0字节恢复案例
  • 【C/C++】 常量指针、指针常量、指向常量的常指针
  • 容斥原理,多步容斥
  • vue(32) : win10创建vue2基础前端框架
  • 如何制作一款资源网站app
  • 解决在Win7下运行一些老游戏花屏或色彩异常问题的方法
  • 使用vue3+vite+elctron构建小项目介绍Electron进程间通信
  • 家政APP开发服务同城预约维修接单管理系统软件小程序
  • NOIP2023模拟8联测29 C. 蛋糕
  • echarts的图表立体感——实现立体柱状图和立体饼图的详细教程
  • 解决VSCode使用SSH远程连接时无法指定用户名的问题
  • Vue Camera是什么,如何用
  • ORANGE室内高尔夫—韩国室内模拟高尔夫原装进口真实体验身临其境
  • 【观察】从口袋到云端全景式AI创新,联想“全栈智能”再升级
  • linux 实用命令搜集 —— 筑梦之路
  • 08-Docker-网络管理