LintCode 二叉树中的最大路径和
来源:互联网 发布:ubuntu vnc客户端启动 编辑:程序博客网 时间:2024/05/21 17:56
给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和)
样例
给出一棵二叉树:
1 / \ 2 3
返回 6
动态规划。
任意节点开始,任意节点结束。
考虑对于任意节点,包含该节点及其子树而构成的路径的最大和有以下几种:
- 其左子树的最大路径+右子树的最大路径+其本身(三者均为正数)。
- 其左子树的最大路径+其本身(右子树最大路径为负)。
- 其右子树的最大路径+其本身(左子树最大路径为负)。
- 其本身(左、右子树最大路径均为负)。
而包含某节点及其子树可构成的路径(可被该节点的父节点拿来继续构成路径)则不包括上述四种的第1种。
采用自底向上的方式(后序遍历即可)。每个节点本身的权值用其构成的最大路径(可被该节点的父节点拿来继续构成路径)的值来更新。变量m(存储最大路径值)用上述四种中最大的值来更新。整棵树遍历结束之后,返回m即可。
代码如下:
"""Definition of TreeNode:class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None"""class Solution: """ @param root: The root of binary tree. @return: An integer """ def maxPathSum(self, root): # write your code here m=[0] #存储最大值 m[0]=-float("Inf") def postOrderTraversal(x,m): if x!=None: postOrderTraversal(x.left,m) postOrderTraversal(x.right,m) if x.left==None and x.right==None: #叶节点 m[0]=max(x.val,m[0]) elif x.left==None: #只有右孩子 m[0]=max(x.val,x.val+x.right.val,m[0]) x.val=max(x.val,x.val+x.right.val) elif x.right==None: #只有左孩子 m[0]=max(x.val,x.val+x.left.val,m[0]) x.val=max(x.val,x.val+x.left.val) else: #有左右孩子 m[0]=max(x.val,x.val+x.left.val+x.right.val,x.val+x.left.val,\ x.val+x.right.val,m[0]) x.val=max(x.val,x.val+x.left.val,x.val+x.right.val) postOrderTraversal(root,m) return m[0]
阅读全文
0 0
- LintCode-二叉树中的最大路径和
- lintcode,二叉树中的最大路径和
- 二叉树中的最大路径和-LintCode
- LintCode 二叉树中的最大路径和
- lintcode--二叉树中的最大路径和
- 二叉树中的最大路径和-LintCode
- lintcode-二叉树中的最大路径和-94
- lintcode(94)二叉树中的最大路径和
- LintCode-分治-二叉树中的最大路径和
- [LintCode] Binary Tree Maximum Path Sum (二叉树中的最大路径和)
- lintcode binary-tree-maximum-path-sum 二叉树中的最大路径和
- 二叉树中的最大路径和
- 二叉树中的最大路径和
- 题目:二叉树中的最大路径和
- 二叉树中的最大路径和
- 二叉树中的最大路径和
- 二叉树中的最大路径和
- 二叉树中的最大路径和
- Oracle开放远程连接
- python对lxml解析html得到的xpath路径去除()、[]得到模式路径
- 自定义控件之放大缩小和移动.进度
- 面向对象
- 在HTML表单中利用JavaScript实现图片上传的前端校验
- LintCode 二叉树中的最大路径和
- Hadoop HA
- log4j配置详解
- hdu 2012 A计划
- css3图片旋转动画
- 计算机网络复习(Ch4运输层)
- 服务器 tensorboard 个人电脑 ip
- LeetCode 22 Generate Parentheses (DFS 构造)
- 前端开发——HTML学习笔记