zoukankan      html  css  js  c++  java
  • 深度优先遍历--最大路径和

    首先是树的建立

    class TreeNode:
        def __init__(self,x,left=None,right=None):
            self.val=x
            self.left=left
            self.right=right
    t3=TreeNode(10);t4=TreeNode(12)
    t5=TreeNode(2);t6=TreeNode(1)
    t1=TreeNode(2,t3,t4);t2=TreeNode(-2,t5,t6)
    root=TreeNode(1,t1,t2)

    树如图所示:

    对于每一个节点而言,都有一个停值和不停值,当前节点的停值=max(左孩子停值,左孩子不停值,右孩子停值,右孩子不停值,左孩子不停值+右孩子不停值+当前节点的值);

    当前节点的不停值=max(左孩子不停值+当前节点值,右孩子不停值+当前节点值,当前节点值)

    def maxpathsum(root):
        return max(helper(root))
    def helper(root):
        if root == None:
            #如果是空,那么返回无穷小,这样叶子节点才会有相应的值
            return float("-inf"),float("-inf")
        leftno,leftstop=helper(root.left)
        rightno,rightstop=helper(root.right)
        nostop=max(leftno+root.val,rightno+root.val,root.val)
        stop=max(leftno,leftstop,rightno,rightstop,leftno+rightno  
        +root.val)
        return nostop,stop

    注意:我们利用深度优先搜索一直到叶子节点,然后从下至上依此获取每个节点的停值和不停值。

  • 相关阅读:
    还能这样偷懒?用Python实现网站自动签到脚本
    普通爬虫 VS 多线程爬虫!Python爬虫运行时间对比
    中文文献阅读方法及笔记模板
    约束
    可迭代对象补充
    练习题及补充
    内置函数的补充/super/异常值处理
    特殊成员
    嵌套
    面向对象知识点总结补充
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11643979.html
Copyright © 2011-2022 走看看