前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >深度优先遍历--最大路径和

深度优先遍历--最大路径和

作者头像
西西嘛呦
发布2020-08-26 10:09:29
发布2020-08-26 10:09:29
46200
代码可运行
举报
运行总次数:0
代码可运行

首先是树的建立

代码语言:javascript
代码运行次数:0
运行
复制
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(左孩子不停值+当前节点值,右孩子不停值+当前节点值,当前节点值)

代码语言:javascript
代码运行次数:0
运行
复制
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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档