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

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

  • 相关阅读:
    腾讯云学习笔记
    STL常见容器的理解
    C++STL
    Ubuntu:查看目录或文件信息 ls
    安装Ubuntu(通过U盘启动盘)
    C++基础知识
    C++ OpenCV常用的一些函数
    sqlite3主键,外键
    Windows下 Qt添加新模块
    IDE将C++源码生成为可执行文件过程
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11643979.html
Copyright © 2011-2022 走看看