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

news/2024/12/23 4:37:14/

目录

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.ppmy.cn/news/1190733.html

相关文章

Ubuntu定时执行任务

cron一个Linux定时执行工具&#xff0c;可以定时执行一些任务。 crontab -l 如果显示“no crontab for xxx” 说明没有启动cron。 service cron start 这样就启动cron了。 服务相关命令&#xff1a; service cron stop service cron restart service cron reload 查看当…

pandora的使用

在服务器上搭建Poandra-GPT一般用的centos系统&#xff0c;windows虽然也行… 用Centos的话可能涉及python的环境问题&#xff0c;pandora需要3.7以上 的python版本&#xff0c;如果在服务器肉身上做实验&#xff0c;对于新手可能很容易出问题&#xff0c;详细教程参考为之前写…

11月1日星期三今日早报简报微语报早读

11月1日星期三&#xff0c;农历九月十八&#xff0c;早报微语早读分享。 1、神舟十六号航天员乘组平安抵京&#xff1b; 2、微信/抖音/B站等平台&#xff1a;将推动50万粉以上“自媒体”账号实名信息展示&#xff1b; 3、第三批鼓励仿制药品建议目录公示&#xff0c;包括抗癌…

Python测试之Pytest详解

概要 当涉及到python的测试框架时&#xff0c;pytest是一个功能强大且广泛应用的第三方库。它提供简洁而灵活的方式来编写和执行测试用例&#xff0c;并具有广泛的应用场景。下面是pytest的介绍和详细使用说明&#xff1a; pytest是一个用于python单元测试的框架&#xff0c;它…

《TCP/IP详解 卷一:协议》第5章的IPv4数据报的Checksum(校验和)字段的计算(这里才能解开你的困惑)

首先&#xff0c;我当你看过书&#xff0c;但是比较懵。 1&#xff0c;实例说明Checksum(校验和)的计算步骤 直奔主题&#xff0c;分析一下这个Checksum&#xff08;校验和&#xff09;怎么算出来的。 先用Wireshark随便抓一个UDP或TCP包分析一下。 如上面&#xff0c;我们得…

iOS实现弹簧放大动画

效果图 实现代码 - (void)setUpContraints {CGFloat topImageCentery (SCREEN_HEIGHT - 370 * PLUS_SCALE) / 2;[self.topIconView mas_makeConstraints:^(MASConstraintMaker *make) {make.centerX.mas_equalTo(0);make.centerY.equalTo(self.view.mas_top).with.offset(t…

antv/g6 节点、及自定义节点

节点 AntV G6 中内置节点支持的通用属性通常包括以下几个&#xff1a; id&#xff1a;节点的唯一标识符。 x 和 y&#xff1a;节点的位置坐标。 label&#xff1a;节点的标签文本。 style&#xff1a;节点的样式&#xff0c;用于设置节点的外观&#xff0c;可以包括填充颜色…

[SpringCloud | Linux] CentOS7 部署 SpringCloud 微服务

目录 一、环境准备 1、工具准备 2、虚拟机环境 3、Docker 环境 二、项目准备 1、配置各个模块&#xff08;微服务&#xff09;的 Dockerfile 2、配置 docker-compose.yml 文件 3、Maven 打包 4、文件整合并传输 三、微服务部署 1、部署至 Docker 2、访问微服务 四…