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

Python算法——树的路径和算法

Python算法——树的路径和算法

树的路径和算法是一种在树结构中寻找从根节点到叶节点的所有路径,其路径上的节点值之和等于给定目标值的算法。这种算法可以用Python语言实现,本文将介绍如何使用Python编写树的路径和算法,并给出一些示例代码。

树的定义

树是一种非线性的数据结构,由节点和边组成。每个节点可以有零个或多个子节点,每个子节点只有一个父节点。树的顶部节点称为根节点,没有子节点的节点称为叶节点。树的高度是从根节点到最远的叶节点的最长路径的长度。树的路径是从一个节点到另一个节点的边的序列。树的路径和是路径上的所有节点的值的和。

在Python中,我们可以使用类来定义树的节点,如下所示:

# 定义树的节点类
class TreeNode:# 初始化节点,包含值,左子节点和右子节点def __init__(self, val, left=None, right=None):self.val = valself.left = leftself.right = right

使用这个类,我们可以创建一棵树,如下图所示:

# 创建一棵树
root = TreeNode(5)
root.left = TreeNode(4)
root.right = TreeNode(8)
root.left.left = TreeNode(11)
root.left.left.left = TreeNode(7)
root.left.left.right = TreeNode(2)
root.right.left = TreeNode(13)
root.right.right = TreeNode(4)
root.right.right.left = TreeNode(5)
root.right.right.right = TreeNode(1)

树的路径和算法

树的路径和算法的思路是使用深度优先搜索(DFS)遍历树的所有路径,同时记录每个路径的和,如果路径的和等于目标值,就将该路径加入到结果列表中。为了实现这个算法,我们需要维护两个变量:一个是当前路径的列表,一个是当前路径的和。每当我们访问一个节点,我们就将其值加入到当前路径的列表和当前路径的和中,然后递归地访问其左右子节点。如果我们到达了一个叶节点,我们就检查当前路径的和是否等于目标值,如果是,就将当前路径的列表复制一份并加入到结果列表中。最后,我们需要回溯,即将当前节点的值从当前路径的列表和当前路径的和中移除,以便继续探索其他路径。

下面是用Python实现树的路径和算法的代码:

# 定义树的路径和算法
def path_sum(root, target):# 初始化结果列表,当前路径列表和当前路径和result = []path = []path_sum = 0# 定义辅助函数,用于递归地遍历树def dfs(node):# 如果节点为空,直接返回if not node:return# 将节点的值加入到当前路径列表和当前路径和中path.append(node.val)path_sum += node.val# 如果节点是叶节点,检查当前路径和是否等于目标值if not node.left and not node.right:if path_sum == target:# 如果是,将当前路径列表复制一份并加入到结果列表中result.append(path[:])# 如果节点不是叶节点,递归地访问其左右子节点else:dfs(node.left)dfs(node.right)# 回溯,将节点的值从当前路径列表和当前路径和中移除path.pop()path_sum -= node.val# 从根节点开始遍历树dfs(root)# 返回结果列表return result

树的路径和算法的示例

假设我们有如下图所示的一棵树,目标值为22:

使用上面的代码,我们可以得到如下的结果:

# 调用树的路径和算法
result = path_sum(root, 22)
# 打印结果
print(result)
# 输出:[[5, 4, 11, 2], [5, 8, 4, 5]]

这表示有两条路径的和等于22,分别是5 -> 4 -> 11 -> 2和5 -> 8 -> 4 -> 5。

总结

本文介绍了如何使用Python编写树的路径和算法,并给出了一些示例代码。树的路径和算法是一种使用深度优先搜索遍历树的所有路径,同时记录每个路径的和,如果路径的和等于目标值,就将该路径加入到结果列表中的算法。这种算法可以用于解决一些与树相关的问题

相关文章:

Python算法——树的路径和算法

Python算法——树的路径和算法 树的路径和算法是一种在树结构中寻找从根节点到叶节点的所有路径,其路径上的节点值之和等于给定目标值的算法。这种算法可以用Python语言实现,本文将介绍如何使用Python编写树的路径和算法,并给出一些示例代码…...

数据结构之链表练习与习题详细解析

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.习题解…...

QT中使用unity

qt把unity发入widget中 头文件showunitywindowsinqt #ifndef SHOWUNITYWINDOWSINQT_H #define SHOWUNITYWINDOWSINQT_H #include <QObject> #include <QProcess> #include <windows.h> #include <winuser.h> #include <QDebug> class ShowUnity…...

QTableView/QTableWidget设置单元格字体颜色及背景色

1.QTableView设置单元格字体颜色及背景色 QStandardItem * pItem new QStandardItem("AAA"); pItem->setBackground(QBrush(Qt::blue)); // 设置背景色 pItem->setForeground(QBrush(Qt::red)); // 设置字体颜色 2.QTableWidget设置单元格字…...

电脑上可以写便签的软件哪些界面比较可爱且好用?

电脑上可以安装使用的便签类软件比较多&#xff0c;在选择使用电脑便签软件时&#xff0c;很多人对便签的外观界面还是比较在意的&#xff0c;一个好看的便签界面在一方面可以引起大家的注意&#xff0c;另一方面可以增加电脑桌面背景和便签类软件的协调性。 电脑便签软件通常…...

2021秋招-总目录

2021秋招-目录 知识点总结 预训练语言模型: Bert家族 1.1 BERT、attention、transformer理解部分 B站讲解–强烈推荐可视化推倒结合代码理解代码部分常见面试考点以及问题: word2vec 、 fasttext 、elmo;BN 、LN、CN、WNNLP中的loss与评价总结 4.1 loss_function&#xff1…...

HTML5生成二维码

H5生成二维码 前言二维码实现过程页面实现关键点全部源码 前言 本文主要讲解如何通过原生HTML、CSS、Js中的qrcodejs二维码生成库&#xff0c;实现一个输入URL按下回车后输出URL。文章底部有全部源码&#xff0c;需要可以自取。 实现效果图&#xff1a; 上述实现效果为&#…...

大数据-之LibrA数据库系统告警处理(ALM-25005 Nscd服务异常)

告警解释 系统每60秒周期性检测nscd服务的状态&#xff0c;如果连续4次&#xff08;3分钟&#xff09;查询不到nscd进程或者无法获取ldapserver中的用户时&#xff0c;产生该告警。 当进程恢复且可以获取ldapserver中的用户时&#xff0c;告警恢复。 告警属性 告警ID 告警级…...

NLP:使用 SciKit Learn 的文本矢量化方法

一、说明 本文是使用所有 SciKit Learns 预处理方法生成文本数字表示的深入解释和教程。对于以下每个矢量化器&#xff0c;将给出一个简短的定义和实际示例&#xff1a;one-hot、count、dict、TfIdf 和哈希矢量化器。 SciKit Learn 是一个用于机器学习项目的广泛库&#xff0c;…...

这些仪表板常用的数据分析模型,你都见过吗?

本文由葡萄城技术团队发布。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 ##前言 在数字化时代&#xff0c;数据已经成为了企业决策和管理的重要依据。而仪表板作为一种数据可视化工具&#x…...

【Proteus仿真】【Arduino单片机】多功能数字时钟设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、DS1302温度传感器、DS1302时钟、按键、蜂鸣器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示当前日期…...

c语言回文数

以下是用C语言编写的回文数代码&#xff1a; #include <stdio.h>int main() { int num, reversedNum 0, remainder, originalNum; printf("请输入一个正整数&#xff1a;"); scanf("%d", &num); originalNum num; while (num …...

【学习记录】从0开始的Linux学习之旅——编译linux内核

一、学习背景 从接触嵌入式至今&#xff0c;除了安装过双系统接触了一丢丢linux外&#xff0c;linux在我眼中向来是个传说。而如今得到了一块树莓派&#xff0c;于是决心把linux搞起来。 二、概念学习 Linux操作系统通常是基于Linux内核&#xff0c;并结合GNU项目中的工具和应…...

uni-app - 日期 · 时间选择器

目录 1.基本介绍 2.案例介绍 ①注意事项&#xff1a; ②效果展示 3.代码展示 ①view部分 ②js部分 ③css样式 1.基本介绍 从底部弹起的滚动选择器。支持五种选择器&#xff0c;通过mode来区分&#xff0c;分别是普通选择器&#xff0c;多列选择器&#xff0c;时间选择器&a…...

使用USB转JTAG芯片CH347在Vivado下调试

简介 高速USB转接芯片CH347是一款集成480Mbps高速USB接口、JTAG接口、SPI接口、I2C接口、异步UART串口、GPIO接口等多种硬件接口的转换芯片。 通过XVC协议&#xff0c;将CH347应用于Vivado下&#xff0c;简单尝试可以成功&#xff0c;源码如下&#xff0c;希望可以一起共建&a…...

硬技能之上的软技巧(三)

在硬技能的基础上&#xff0c;如何运用软技巧来进一步提升个人能力和职业发展。在之前的讨论中&#xff0c;我们提到了硬技能和软技巧的基本概念&#xff0c;以及如何运用软技巧来提升个人能力和职业发展。本篇文章将进一步探讨软技巧中的一些重要方面&#xff0c;包括自我管理…...

mysql 查询

-- 多表查询select * from tb_dept,tb_emp; 内来链接 -- 内连接 -- A 查询员工的姓名 &#xff0c; 及所属的部门名称 &#xff08;隐式内连接实现&#xff09;select tb_emp.name,tb_dept.name from tb_emp,tb_dept where tb_emp.idtb_emp.id;-- 推荐使用select a.name,b.n…...

2311rust过程宏的示例

原文 Rust2018中的过程宏 在Rust2018版本中,我最喜欢的功能是过程宏.在Rust中,过程宏有着悠久而传奇的历史(并继续拥有传奇的未来!) 因为2018年版极大改善了定义和使用它们的体验. 什么是过程宏 过程宏是,在编译时用一段语法,生成新语法的函数.Rust2018中的过程宏有三个风格…...

数据分析:数据预处理流程及方法

数据预处理是数据分析过程中至关重要的一步&#xff0c;它涉及到清洗、转换和整理原始数据&#xff0c;以便更好地适应分析模型或算法。以下是一些常见的数据预处理方法和规则&#xff1a; 数据清洗&#xff1a; 处理缺失值&#xff1a;检测并处理数据中的缺失值&#xff0c;可…...

uniapp 防抖节流封装和使用

防抖(debounce)&#xff1a;定义一个时间&#xff0c;延迟n秒执行&#xff0c;n秒内再次调用&#xff0c;会重新计时&#xff0c;计时结束后才会再次执行 主要运用场景&#xff1a; 输入框实时搜索&#xff1a;在用户输入内容的过程中&#xff0c;使用防抖可以减少频繁的查询…...

在个人服务器部署私有AI助手:基于Llama与Ollama的本地大模型实践

1. 项目概述&#xff1a;当开源大模型遇上个人服务器最近在折腾个人服务器的时候&#xff0c;发现了一个非常有意思的项目&#xff0c;叫getumbrel/llama-gpt。简单来说&#xff0c;它就是一个让你能在自己的硬件上&#xff0c;比如树莓派、NAS或者一台闲置的旧电脑&#xff0c…...

如何三步解锁Wallpaper Engine资源文件:RePKG完整使用指南

如何三步解锁Wallpaper Engine资源文件&#xff1a;RePKG完整使用指南 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾经面对Wallpaper Engine中精美的动态壁纸&#xff0c…...

AI Agent 工程师顶尖大厂修炼手册

目录 AI Agent 工程师顶尖大厂修炼手册&#xff08;RAG 驱动・全景实战版&#xff09; 前言&#xff1a;为什么这份手册是 “大厂 offer 通关文牒” 第一卷&#xff1a;筑基篇 —— 大厂敲门砖&#xff08;必考・零容错&#xff09; 第 1 章&#xff1a;编程与系统基础&…...

私有化部署ChatGPT Web应用:从架构解析到实战部署指南

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目&#xff0c;叫“ChatGPTwebV15”。这名字听起来有点技术范儿&#xff0c;但说白了&#xff0c;就是一个让你能自己部署、完全掌控的类ChatGPT网页应用。它基于OpenAI的API&#xff0c;但把整个交互界面、对话管理、甚至…...

AI协同开发新范式:基于规范驱动的Agentic Workflows实践

1. 项目概述&#xff1a;告别碎片化&#xff0c;用“活的”规范驱动AI协同开发如果你和我一样&#xff0c;每天都在跟Claude Code、Cursor这类AI编程工具打交道&#xff0c;那你肯定也经历过这种痛苦&#xff1a;想实现一个复杂功能&#xff0c;得先花十几分钟给AI解释一遍项目…...

Qwen3.5-4B-Claude-Opus部署教程:基于llama.cpp的GPU加速Web服务搭建详解

Qwen3.5-4B-Claude-Opus部署教程&#xff1a;基于llama.cpp的GPU加速Web服务搭建详解 1. 模型介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个基于Qwen3.5-4B的推理蒸馏模型&#xff0c;特别强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能力。该版…...

7步掌握炉石传说自动化:开源脚本完全指南

7步掌握炉石传说自动化&#xff1a;开源脚本完全指南 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script Hearthstone-Script是一款免费开源的炉石传说自动…...

DellFanManagement:戴尔笔记本底层风扇控制框架的技术深度解析

DellFanManagement&#xff1a;戴尔笔记本底层风扇控制框架的技术深度解析 【免费下载链接】DellFanManagement A suite of tools for managing the fans in many Dell laptops. 项目地址: https://gitcode.com/gh_mirrors/de/DellFanManagement DellFanManagement是一个…...

AISMM基准数据首次全球统一发布(SITS2026核心机密解封)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;SITS2026发布&#xff1a;AISMM行业基准数据 SITS2026 是面向智能交通系统&#xff08;ITS&#xff09;与多模态感知融合领域发布的全新行业基准数据集&#xff0c;由 AISMM&#xff08;Autonomous In…...

从游戏UI到桌面光标:基于《重返未来:1999》风格的光标主题制作全流程解析

1. 项目概述&#xff1a;从游戏UI到桌面光标如果你和我一样&#xff0c;既是《重返未来&#xff1a;1999》的玩家&#xff0c;又对桌面美化和个性化有着近乎偏执的追求&#xff0c;那么这个项目可能会让你眼前一亮。它不是一个游戏模组&#xff0c;也不是一个壁纸包&#xff0c…...