网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

c++路径之和实例分析

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

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站设计、融安网络推广、成都小程序开发、融安网络营销、融安企业策划、融安品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供融安建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

算法:

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

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++路径之和实例分析
文章位置:http://bjjierui.cn/article/ghegdo.html

其他资讯