Binary Tree Maximum Path Sum
来源:互联网 发布:网络侮辱他人 寻衅滋事 编辑:程序博客网 时间:2024/06/05 16:02
Binary Tree Maximum Path Sum
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6
.
题目:求二叉树中所有路径中的最大路径和。(!!!注意节点值可能是负数,所以任何一个节点可以作为单独的路径,不一定是两个叶节点之间的路径)如果保证节点值都大于0,则可以说一定是叶节点的值。
分析:思路比较清晰,遍历每个节点,计算通过该节点的路径和,包括只有该节点的路径,包含该节点和其左(或右)孩子部分的路径,或者像例子中,从左到右全部包含的路径。记录下最大的和res即可,如果新路径比res大,就重置res。用lv和rv分别记录包含root的左子树和右子树可达到的最大路径。
代码:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int maxPathSum(TreeNode *root) { if(root==NULL) return 0; int l,r,res=INT_MIN;//注意,因为是可能节点值为负数,res初始化为最小的整数 helper(root,l,r,res); return res; } //lv记录root的左子树可供root取得的路径最大和,rv记录右侧,res保存最大结果。 void helper(TreeNode *root, int &lv, int &rv,int &res){ if(root==NULL){ lv=0; rv=0; return ; } int lv1,lv2,rv1,rv2; helper(root->left,lv1,rv1,res);//递归 helper(root->right,lv2,rv2,res); lv=max((max(lv1,rv1)+root->val), root->val); //如果root的左子树为负值,就直接取root->val作为lv rv=max((root->val+max(lv2,rv2)),root->val); int t=INT_MIN; t=max(max(lv,rv), lv+rv-root->val);//取三者的最大值,看是否超过res,更新res if(t>res) res=t; }};
方法二:基于后序遍历的方法,后序遍历函数返回的是以root为端点可以达到的单侧最长路径
代码:
class Solution {public: int maxPathSum(TreeNode *root) { if(root==NULL) return 0; res=INT_MIN; postOrder(root); return res; } int postOrder(TreeNode *root){//返回以root为端点可以达到的单侧最长路径 if(root==NULL) return 0; int l=postOrder(root->left); int r=postOrder(root->right); int ret=max(max(l+root->val,r+root->val),root->val);//三者中最大值 res=max(res,max(l+r+root->val,ret));//res是 res本身,root可达到的单侧最大值,root左右相加的值 中三者去最大 return ret; } private : int res;};
0 0
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- LeetCode OJ算法题(六十二):Unique Paths II
- webstrom快捷键大全
- acm steps 1.3.7(排列2)
- netstat 命令
- 一个合格的程序员应该读过哪些书
- Binary Tree Maximum Path Sum
- Jar mismatch! Fix your dependencies
- JavaScript-形象理解面向对象、原型和继承
- android学习笔记——Intent和IntentFilter
- 平移视图效果
- UML类图
- C语言指针和传参基本的实验
- 2015年华为技术服务岗面试经历(重庆)
- PCL学习