07-01:数据类型二:二叉树:路径和问题

递归是一个太强大的算法了!

总结一下:路径和这个利用递归遍历所有可能性!

一共四道题

1、节点和为固定值是否存在

二叉树中是否存在节点和为指定值的路径

class Solution:

    def hasPathSum(self , root , sum ):

        # write code here

        if not root:

            return False

        if root.val==sum and not root.left and not root.right:

            return True

        return self.hasPathSum(root.left,sum-root.val) or self.hasPathSum(root.right,sum-root.val)

https://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c?tpId=196&&tqId=37053&rp=1&ru=/activity/oj&qru=/ta/job-code-total/question-ranking

2、节点和为固定值的路径

二叉树根节点到叶子节点和为指定值的路径

class Solution:

    def pathSum(self , root , sum ):

        ret = list()

        path = list()


        def dfs(root, target):

            if not root:

                return

            path.append(root.val)

            target -= root.val

            if not root.left and not root.right and target == 0:

                ret.append(path[:])

            dfs(root.left, target)

            dfs(root.right, target)

            path.pop()

            #在回溯呀

        dfs(root, sum)

        return ret

https://www.nowcoder.com/practice/840dd2dc4fbd4b2199cd48f2dadf930a?tpId=117&&tqId=37718&rp=1&ru=/activity/oj&qru=/ta/job-code-high/question-ranking

3、所有节点的路径和

二叉树根节点到叶子节点的所有路径和

class Solution:

    def sumNumbers(self , root ):

        # write code here

        if not root:

            return 0

        def preorder(root,sum1):

            if not root:

                return 0

            sum1=10*sum1+root.val

            if not root.left and not root.right:

                  return sum1

            return preorder(root.left,sum1)+preorder(root.right,sum1)

           #这样可以求出所有路径和啊

        return preorder(root,0)

https://www.nowcoder.com/practice/185a87cd29eb42049132aed873273e83?tpId=117&&tqId=37715&rp=1&ru=/activity/oj&qru=/ta/job-code-high/question-ranking

4、最大路径和

二叉树的最大路径和

class Solution:

    def maxPathSum(self , root ):

        # write code here

        self.res=float('-inf')

        def pathmax(root):

            if not root:

                return 0

            leftmax=max(0,pathmax(root.left))

            rightmax=max(0,pathmax(root.right))

            self.res=max(self.res,leftmax+rightmax+root.val)

           #全局最大

            return max(leftmax,rightmax)+root.val

           #包含当前节点的最大值

        if not root:

            return 0

        pathmax(root)

        return self.res

https://www.nowcoder.com/practice/da785ea0f64b442488c125b441a4ba4a?tpId=196&&tqId=37050&rp=1&ru=/activity/oj&qru=/ta/job-code-total/question-ranking

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容