Path Sum III

作者: carlclone | 来源:发表于2019-07-02 13:28 被阅读0次

这题给我的教训太深了 , 如果一道题相对太难太复杂 , 没有完整的思路 , 千万千万千万不要用过程化的方式写伪代码 ,这样是一直在满足特殊情况的修修补补,最后写出一堆垃圾代码只能删掉 , 先放宽条件 , 解决简单的问题 , 再一步步思考
还有, 这种题要先画图 别做跳过去直接写伪代码的蠢事

how to solve it 应该是本很好的书 , 做里面的题 ? 这本做完以后感觉可以去当老师了XD

暗时间里提到的其他书也可以看下

Path Sum III Path Sum III Path Sum III


func pathSum(root *TreeNode, sum int) int {
    if root==nil {
        return 0
    }
    res:=0
    res+=findPath(root,sum)
    if root.Left!=nil {
        res+=pathSum(root.Left,sum)
    }
    if root.Right!=nil {
        res+=pathSum(root.Right,sum)
    }
    return res
}

func findPath(node *TreeNode, sum int) int {
    if node==nil {
        return 0
    }
    res:=0
    if sum-node.Val==0 {
        res+=1
    }
    res+=findPath(node.Left,sum-node.Val)
    res+=findPath(node.Right,sum-node.Val)
    return res

}


pathSum(node,sum) {
    if node nil {
        return 0
    }
    res=0
    res+=findPath(node,sum)
    if left
        res+=pathSum(left,sum)
    if right
        res+=pathSum(right,sum)

    return res
}


findPath(node,sum) {
    if node nil {
        return 0
    }

    res=0
    if sum-node.v==0 {
        res+=1
    }

    res+=findPath(node,sum-node.v)
    return res
}




错误的过程化思考方式

global res=0

findPathsIn(node,sum) {

    if sum-node.v==0 {
        res++

        

        return
    }
    if sum-node.v<0 {
        if node has left child {
            findPathsIn(node.left,sum)
        }
         if node has right child {
            findPathsIn(node.right,sum)
        }
        return
    }

    if sum-node.v>0 {
        if node has left child {
            findPathsIn(node.left,sum-node.v)
        }
         if node has right child {
            findPathsIn(node.right,sum-node.v)
        }   
        
            return
        
    }
    
}

写出来的垃圾代码


相关文章

网友评论

    本文标题:Path Sum III

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