美文网首页
113. Path Sum II

113. Path Sum II

作者: sarto | 来源:发表于2022-06-14 09:35 被阅读0次

    题目

    给定一个二叉树根节点 root 和一个整数 targetSum,返回所有从根节点到叶子节点 的和与目标值相同的路径。每个路径代表的是节点中的值。

    解析

    采用中序遍历的方式,递归遍历到叶子节点时,判断路径和,如果等于目标值,则以数组的形式返回,在非叶子节点返回的时候,合并左右子树的返回结果作为返回值返回。
    所以这个递归函数原型

    • 参数 target int 目标值
    • 参数 sum int 已遍历路径之和
    • 参数 node 当前节点
    • 返回值 paths [][]int 符合要求的节点路径
      f(target, sum, node) paths

    伪代码

    if node == nil
      return [][]int{}
    if node.left == nil && node.right == nil && target == sum + node.val
      return [][]int{{node.val}}
    rst1 = f(target, sum+node.val, node.left)
    rst2 = f(target, sum+node.val, node.right)
    for i,_  in rst1
      rst1[i] = append([]int{node.val}, rst1[i]...)
    for i,_  in rst2
      rst2[i] = append([]int{node.val}, rst2[i]...)
    rst1 = append(rst1, rst2...)
    return rst1
    

    代码

    func pathSum(root *TreeNode, targetSum int) [][]int {
        return f(targetSum, 0, root)
    }
    
    func f(target int, sum int, node *TreeNode) [][]int {
        if node == nil {
            return [][]int{}
        }
        if node.Left == nil && node.Right == nil && target == sum + node.Val {
            return [][]int{{node.Val}}
        }
        
        rst1 := f(target, sum+node.Val, node.Left)
        rst2 := f(target, sum+node.Val, node.Right)
        
        for i, _ := range rst1 {
            rst1[i] = append([]int{node.Val}, rst1[i]...)
        }
        for i, _ := range rst2 {
            rst2[i] = append([]int{node.Val}, rst2[i]...)
        }
        rst1 = append(rst1, rst2...)
        return rst1
    }
    

    相关文章

      网友评论

          本文标题:113. Path Sum II

          本文链接:https://www.haomeiwen.com/subject/erzamrtx.html