树06--二叉树中和为某一值的路径

2023-11-18

树06--二叉树中和为某一值的路径-jz24

题目概述

  • 算法说明
    输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
  • 测试用例
    输入1:
    {10,5,12,4,7},22
    输出1:
    [[10,5,7],[10,12]]
    输入2:
    {10,5,12,4,7},15
    输出2:
    []

解析&参考答案

  • 解析
  1. 使用递归的方式,每次从根节点出发,每次递归的时候其sum减对应的节点值,sum值为0且该节点刚好为叶子节点的时候,该路径就满足要求;
  • 参考答案
vim jz24.go
package main

import "fmt"

type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

func FindPath(root *TreeNode, expectNumber int) [][]int {
	result := make([][]int, 0)
	res := make([]int, 0)
	FindPathCore(root, expectNumber, res, &result)
	return result
}

func FindPathCore(root *TreeNode, expectNumber int, res []int, result *[][]int) {
	if root == nil {
		return
	}
	expectNumber -= root.Val
	res = append(res, root.Val)
	if expectNumber == 0 && root.Left == nil && root.Right == nil {
		*result = append(*result, res)
	} else {
		FindPathCore(root.Left, expectNumber, res, result)
		FindPathCore(root.Right, expectNumber, res, result)
	}
	res = res[:len(res)-1]
}

func main() {
	root := &TreeNode{10, &TreeNode{5, &TreeNode{4, nil, nil}, &TreeNode{7, nil, nil}},
		&TreeNode{12, nil, nil}}
	expectNumber := 22 // 15
	ret := FindPath(root, expectNumber)
	fmt.Println(ret)
}

注意事项

  1. 每次递归结束后需要去掉加入到res数组中最后一个元素。

说明

  1. 当前使用 go1.15.8
  2. 参考 牛客网--剑指offer
    标题中jzn(n为具体数字)代表牛客网剑指offer系列第n号题目,例如 jz01 代表牛客网剑指offer中01号题目。

注意!!!

  • 笔者最近在学习 golang,因此趁机通过数据结构和算法来进一步熟悉下go语言
  • 当前算法主要来源于剑指 offer,后续会进一步补充 LeetCode 上重要算法,以及一些经典算法
  • 此处答案仅为参考,不一定是最优解,欢迎感兴趣的读者在评论区提供更优解
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树06--二叉树中和为某一值的路径 的相关文章

  • LeetCode83: 删除排序链表中的重复元素

    给定一个已排序的链表的头 head 删除所有重复的元素 使每个元素只出现一次 返回 已排序的链表 示例 1 输入 head 1 1 2 输出 1 2 示例 2 输入 head 1 1 2 3 3 输出 1 2 3 提示 链表中节点数目在范围
  • JavaScript实现数据结构 -- 链表

    文章目录 链表 链表的特点 链表和数组的区别 JS模拟链表 遍历链表 插入节点 删除节点 链表应用 删除链表中的节点 leetcode 237 思路 代码 反转链表 leetcode 206 思路 代码 链表 链表和数组一样是有多个元素组成
  • 常用的十种算法--马踏棋盘算法

    1 马踏棋盘算法介绍 马踏棋盘算法也被称为骑士周游问题 将马随机放在国际象棋的 8 8 棋盘 Board 0 7 0 7 的某个方格中 马按走棋规则 马走日字 进行移动 要求每个方格只进入一次 走遍棋盘上全部 64 个方格 2 马踏棋盘算法
  • SDUT--OJ《数据结构与算法》实践能力专题训练6 图论

    A 数据结构实验之图论一 基于邻接矩阵的广度优先搜索遍历 Description 给定一个无向连通图 顶点编号从0到n 1 用广度优先搜索 BFS 遍历 输出从某个顶点出发的遍历序列 同一个结点的同层邻接点 节点编号小的优先遍历 Input
  • 循环单链表(C语言版)

    前言 小可爱们 本次一起来看看循环单链表吧 嘻嘻 一 循环单链表的定义 循环单链表是单链表的另一种形式 其结构特点链表中最后一个结点的指针域不再是结束标记 而是指向整个链表的第一个结点 从而使链表形成一个环 和单链表相同 循环链表也有带头结
  • Hash映射理解

    先说数组 数组优点之一 能通过索引很快定位到值 hashmap 就是利用了数组这个优点 对比 线性映射 定义一个数组 数组的元素是结构体 结构体包括 一对键 值 伪代码表示 a 0 struct Bill 5 a 1 struct KK 6
  • 第一个只出现一次的字符(Java)

    题目 在字符串中找出第一个只出现一次的字符 如输入 abaccdeff 则输出 b 第一思路 借助于数组来做 开辟一个长度为26的数组 用来存放字符串中每个字符出现的次数 这样第一次扫描去统计这个字符串中字符出现的次数 第二次去统计第一个出
  • 数据结构之图的两种遍历实现(C语言版)

    上一期文章分享完了图的两种遍历方式 也是两种很重要的算法 DFS和BFS 这两种算法的应用和重要性我就不多说了 内行的人懂的都懂 今天这文章重要就是来上机实现这两种算法 又由于这两种算法都可以由邻接矩阵和邻接表来表示 博主分享的代码都是上机
  • 算法系列15天速成——第八天 线性表【下】

    一 线性表的简单回顾 上一篇跟大家聊过 线性表 顺序存储 通过实验 大家也知道 如果我每次向 顺序表的头部插入元素 都会引起痉挛 效率比较低下 第二点我们用顺序存储时 容 易受到长度的限制 反之就会造成空间资源的浪费 二 链表 对于顺序表存
  • 以太坊系列之十五: 以太坊数据库

    以太坊数据库中都存了什么 以太坊使用的数据库是一个NOSQL数据库 是谷歌提供的开源数据leveldb 这里尝试通过分析以太坊数据库存储了什么来分析以太坊可能为我们提供哪些关于区块链的API 存储内容 NOSQL是一个key value数据
  • 字符串09--表示数值的字符串

    字符串09 表示数值的字符串 jz53 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 请实现一个函数用来判断字符串是否表示数值 包括整数和小数 例如 字符串 100 5e2 123 3 1416 和 1E 16 都表示数值
  • 把字符串转换成整数(字符串)

    题目描述 将一个字符串转换成一个整数 要求不能使用字符串转换整数的库函数 数值为0或者字符串不是一个合法的数值则返回0 输入描述 输入一个字符串 包括数字字母符号 可以为空 输出描述 如果是合法的数值表达则返回该数字 否则返回0 思路一 p
  • OJ-合并两个有序链表

    题目描述 代码如下 Definition for singly linked list struct ListNode int val struct ListNode next struct ListNode mergeTwoLists s
  • 数理统计知识整理——回归分析与方差分析

    题记 时值我的北科研究生第一年下 选学 统计优化 课程 备考促学 成此笔记 以谨记 1 线性回归 1 1 原理分析 要研究最大积雪深度x与灌溉面积y之间的关系 测试得到近10年的数据如下表 使用线性回归的方法可以估计x与y之间的线性关系 线
  • 机器学习算法GBDT的面试要点总结-上篇

    1 简介 gbdt全称梯度提升决策树 在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一 在前几年深度学习还没有大行其道之前 gbdt在各种竞赛是大放异彩 原因大概有几个 一是效果确实挺不错 二是即可以用于分类也可以用于回归 三是可
  • 剑指 Offer(第2版)面试题 35:复杂链表的复制

    剑指 Offer 第2版 面试题 35 复杂链表的复制 剑指 Offer 第2版 面试题 35 复杂链表的复制 解法1 模拟 剑指 Offer 第2版 面试题 35 复杂链表的复制 题目来源 48 复杂链表的复刻 解法1 模拟 算法 复制原
  • 剑指 Offer(第2版)面试题 34:二叉树中和为某一值的路径

    剑指 Offer 第2版 面试题 34 二叉树中和为某一值的路径 剑指 Offer 第2版 面试题 34 二叉树中和为某一值的路径 解法1 深度优先搜索 剑指 Offer 第2版 面试题 34 二叉树中和为某一值的路径 题目来源 47 二叉
  • 剑指 Offer(第2版)面试题 40:最小的 k 个数

    剑指 Offer 第2版 面试题 40 最小的 k 个数 剑指 Offer 第2版 面试题 40 最小的 k 个数 解法1 排序 解法2 快速选择 解法3 优先队列 剑指 Offer 第2版 面试题 40 最小的 k 个数 题目来源 53
  • C++ AVL树(四种旋转,插入)

    C AVL树 四种旋转 插入 一 AVL树的概念及性质 二 我们要实现的大致框架 1 AVL树的节点定义 2 AVL树的大致框架 三 插入 1 插入逻辑跟BST相同的那一部分 2 修改平衡因子
  • 排序:计数排序

    一 概念 计数排序是非比较排序 是对哈希直接定址法的变形应用 二 思想 利用数组统计相同数据出现的次数 例如整型数据m出现n次 就在数组m位置记录数据为n 最后从头遍历数组打印数据即可 通俗来讲就是 数组下标即为数据 下标所指位置的值即为数

随机推荐

  • 2020年全国高校计算机能力挑战赛初赛java语言解答

    题目1 统计从1到N的整数中 所有立方值的平方根为整数的数的格式 输入说明 整数N N lt 10000 输出说明 符合条件的数的个数 如4 3 64 8 2 输入样例 10 输出样例 3 说明 样例中符合条件的3个数是1 4 9 publ
  • Redis系列之安装配置

    前言 缓存Redis的讲解 作为第一个开篇文章 我们不谈高深的东西 从以下几个方面介绍下Redis 简介 安装 配置 启动 OK 下面我们就开始今天的缓存之旅吧 什么是Redis Redis是以Key value形式存储 和传统的关系型数据
  • Itext7填充PDF表单中文无法显示,‘凉’不显示问题

    Itext7填充PDF表单中文无法显示 凉 不显示问题 添加依赖
  • C#使用Sqlite总结

    1 下载Sqlite的dll 页面地址 http system data sqlite org index html doc trunk www downloads wiki 基于本项目的版本 下载Setups for 32 bit Win
  • C++11中std::shared_future的使用

    C 11中的std shared future是个模板类 与std future类似 std shared future提供了一种访问异步操作结果的机制 不同于std future std shared future允许多个线程等待同一个共
  • json-server -g报错

    在vscode终端报 在系统上禁止运行脚本 的话 在下面输入set ExecutionPolicy RemoteSigned 前提是你是以管理员模式运行vscode 然后重新输入 json server v即可
  • 低代码?未来会代替如今的代码吗?

    一 前言 如果选择用一个关键词来代表即将过去的2020年 我相信所有人都会认同是 新冠 疫情来得太快就像龙卷风 短短数月就阻断了全世界范围内无数人与人之间的物理连接 但好在 我们已经全面迈入互联网时代 N95口罩再厚 也阻挡不了信息比特流的
  • Translation Lookaside Buffer (TLB)

    CPU每次访问虚拟内存 虚拟地址都必须转换为对应的物理地址 从概念上说 这个转换需要遍历页表 页表是三级页表 就需要3次内存访问 就是说 每次虚拟内存访问都会导致4次物理内存访问 简单点说 如果一次虚拟内存访问对应了4次物理内存访问 肯定比
  • 如何访问WEB-INF文件夹下的jsp文件

    我们都知道不能直接访问WEB INF文件夹下的jsp文件 那应该怎样访问呢 首先 WEB INF目录是Java WEB应用的安全目录 客户端无法访问 只有服务端可以访问 然后 为什么要这么设计 这样做的初衷是在WEB INF文件夹下放一些不
  • VScode使用PlatformIO IDE时PIO Home一直loading的问题

    近来刚接触 Arduino 想做个小项目 网上都都说 Arduino 自带的IDE不人性化 推荐的是用 VScode搭配 PlatformIO 但是这个插件非常不稳定 各种坑 有的时候安装 Library 点击了 Add 以后会一直转 等半
  • 汇编实验(循环程序设计)(排序以及找非负数)

    这里的排序 用的是冒泡排序 首先 先是说一下找非负数的想法 负数 TEST 80H 之后不为0 我们可以用这个性质来做 1 FIND POSITIVE NUMBER LEA SI FIRST LEA DI SECOND MOV CX N L
  • pg数据库日志 linux,PostgreSQL删除pg_xlog日志

    PostgreSQL的pg xlog下有大量日志 空间不足 如何删除 Darren1 postgres usr local pgsql data pg xlog gt ls 000000010000000000000008 00000028
  • Python调试工具pdb使用详解

    Python调试工具pdb使用详解 1 前言 2 参考文档 3 pdb简介 4 pdb使用命令行调试 4 1 举例代码 4 2 调试器命令 4 2 1 进入pdb调试模式 4 2 2 帮助指令 4 2 3 控制程序执行 4 2 4 设置断点
  • python数据驱动库_Python3

    1 DDT简介 Data Driven Tests DDT 即数据驱动测试 它允许您通过不同的测试数据来运行同一个测试用例 使它作为多个测试用例出现 其官方文档给出的定义如下 DDT Data Driven Tests allows you
  • 利用MATLAB&C语言生成&读取.dat文件

    利用MATLAB C语言生成 读取 dat文件 MATLAB生成 dat文件 MATLAB读取 dat文件 方式一 方式二 C语言生成 dat文件 C语言读取 dat文件 注意事项 有时候 需要在matlab或c语言编程环境中写入或读取 d
  • Linux Socket 事件触发模型 epoll 示例 这里会写一个用C语言的TCP服务器的完全实现的简单程序

    背景介绍 通常的网络服务器实现 是对每一个连接使用一个单独的线程或进程 对高性能应用而言 由于需要同时处理非常多的客户请求 所以这种方式并不能工作得很好 因为诸如资源使用和上下文切换所需的时间影响了在一时间内对多个客户端进行处理 另一个可选
  • window怎么下载和使用nginx

    希望下面的东西对你有帮助 我们一起学习 一起加油 1 首先去官网下载 http nginx org en download html 2 下载后解压到指定文件夹 如图 3 启动negix有如下种 1 双击nginx应用程序即可 闪烁两下 即
  • FIddler之Fiddler移动端抓包

    前言 笔者今天的这篇文章呢 想使用通俗易懂的话语 让大家明白以下内容 什么是抓包哪些场景需要用到抓包Fiddler抓包的原理怎样使用Fiddler进行移动端抓包 一 抓包 包 Packet 是TCP IP协议通信传输中的数据单位 一般也称
  • leetcode-动态规划【背包问题】

    背包问题篇 基础背包 416 分割等和子集 1049 最后一块石头的重量ii 494 目标和 474 一和零 完全背包 518 零钱兑换ii 377 组合总和iv 70 爬楼梯 322 零钱兑换 279 完全平方数 139 单词拆分 多重背
  • 树06--二叉树中和为某一值的路径

    树06 二叉树中和为某一值的路径 jz24 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 输入一颗二叉树的根节点和一个整数 按字典序打印出二叉树中结点值的和为输入整数的所有路径 路径定义为从树的根结点开始往下一直到叶结点所经