千家信息网

c++路径之和实例分析

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本文小编为大家详细介绍"c++路径之和实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"c++路径之和实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。算法:算法
千家信息网最后更新 2025年01月31日c++路径之和实例分析

本文小编为大家详细介绍"c++路径之和实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"c++路径之和实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

算法:

算法采用递归,核心在于如何找到递归的终止条件,具体步骤如下:

1.采用递归的方式,sum的数值要随着遍历过的节点做递减操作,sum = sum-root.Val2.递归的终止条件sum==0是其中之一,如果要求是叶子节点的也需要加上

题目1:路径总和

代码实现:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func hasPathSum(root *TreeNode, sum int) bool {    if root == nil {         return false    }    // 叶子节点的判断,排除非叶子节点==sum的情况    if root.Left == nil && root.Right == nil {        return sum == root.Val    }    res := sum - root.Val     if hasPathSum(root.Left,res) {        return true    }    if hasPathSum(root.Right,res) {        return true    }    return false}

题目2:路径总和2

代码实现:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */var res [][]intfunc pathSum(root *TreeNode, sum int) [][]int {    res = [][]int{} // 为了清空 res 上次的数值    if root == nil {         return nil    }    // var res [][]int     var tmp []int    dfs(root,sum,tmp)    return res}func dfs(root *TreeNode, sum int, tmp []int) {    if root == nil {         return     }    tmp = append(tmp,root.Val)    if sum == root.Val && root.Left == nil && root.Right == nil {        r := make([]int, len(tmp)) // 防止tmp对应的共享内容被修改        copy(r, tmp)        res = append(res, r)        return     }       dfs(root.Left,sum-root.Val,tmp)    dfs(root.Right,sum-root.Val,tmp)       return }

题目3:路径总和3

代码实现:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func pathSum(root *TreeNode, sum int) int {    if root == nil {        return 0    }    result := countPath(root,sum)    result += pathSum(root.Left,sum)    result += pathSum(root.Right,sum)    return result}func countPath(root *TreeNode, sum int) int {    if root == nil {         return 0    }    count := 0    res := sum - root.Val    if res == 0 {        count = 1    }    return count + countPath(root.Left,res) + countPath(root.Right,res)}/*以当前节点作为头结点的路径数量以当前节点的左孩子作为头结点的路径数量以当前节点的右孩子作为头结点的路径数量*/

读到这里,这篇"c++路径之和实例分析"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

路径 节点 递归 之和 实例 实例分析 c++ 分析 代码 内容 叶子 总和 数量 文章 结点 题目 孩子 数值 条件 步骤 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 诈骗案中提供网络技术程序员 软件开发好难可以换个行业吗 一级安全服务器 河北网络技术转让哪家便宜 金周至网络安全宣传 数据放在服务器安全吗 在数据库能够唯一地标识 网络安全审计备案证明啥意思 网络安全六问六答 imfifs数据库怎么用 江苏进口服务器优质推荐云服务器 黄埔区新一代网络技术开发动态 查询数据库中所有的表 军民融合 网络安全装备 中兴服务器工厂 我们身边哪些平台用到了数据库 .网络安全的主要威胁 吉林数据库消防技术服务哪家便宜 美国晶体学数据库 软件开发要从谁的需求出发 网络安全软件认证标准三级 dns服务器密码查看方法 尝试附加到数据库失败 软件开发者要什么学历 全文搜索引擎数据库 计算机网络技术重要的知识 数据库安全售后 李雁翎.数据库技术及应用 知网国家标准全文数据库检索 安徽录播服务器安装虚拟主机
0