leetcode_437

淳属虚构 · · 451 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Golang:

思路:这题没有好的思路,双重递归吧,第一次拿到所有节点,第二次对所有节点进行递归,看看有没有路径符合题目要求。这里讲下我最初的思路:我最开始想的是,把每一条从根节点到叶子节点的路径都提取出来(以数组的形式),然后去对数组做处理,这样会不会效率高一些。后面思考不难发现,这样如果可以实现,会有很多重复的路径被算进总和。所以,这题可能就只剩下暴力的求解思路了。

再插一句,递归这东西,在树结构里真的是无往不利。

代码如下:

func pathSum(root *TreeNode, sum int) int {
    if root==nil {
        return 0
    }
    var nodes []TreeNode
    traverse(root,&nodes)
    res:=0
    for _,v:=range nodes{
        findKinTree(&v,0,sum,&res)
    }
    return res
}
func traverse(root *TreeNode,nodes *[]TreeNode) {
    if root!=nil {
        *nodes=append(*nodes, *root)
        if root.Left!=nil {
            traverse(root.Left,nodes)
        }
        if root.Right!=nil {
            traverse(root.Right,nodes)
        }
    }
}
func findKinTree(root *TreeNode,sum int,k int,res *int)  {
    if root!=nil {
        sum=sum+root.Val
        if sum==k {
            *res++
        }
        if root.Left!=nil {
            findKinTree(root.Left,sum,k,res)
        }
        if root.Right!=nil {
            findKinTree(root.Right,sum,k,res)
        }
    }
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:淳属虚构

查看原文:leetcode_437

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

451 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传