Binary Tree Maximum Path Sum
来源:互联网 发布:胜科金仕达数据系统 编辑:程序博客网 时间:2024/05/17 05:56
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
.
好吧,这种题目。。。单独的return max(left,right)已经hold不住了。。。
想了好多办法但是一直都WA、、、目测没啥简单的方法,只能去遍历树,维护一个值ma记录当前已经记录下的最大的Path Sum,然后每遍历到一个节点,都去更新这个值。
当遍历到某个node时,从根到当前的node的总和是sum。分别遍历左子树和右子树,然后用sum,left,right,left-sum,right-sum,left+right-2*sum+node->val来更新最大值。
其中,sum代表从根到当前节点的值,left代表从根到node->left的最大值,right代表从根到node->right的最大值,left-sum代表从left开始的最大值,right-sum代表从right开始的最大值,left+right-2*sum+node->val代表选当前node为根,即,整棵树的最大path sum在以node为根的这颗子树中。
view的返回值就是代表从root到当前node能获取到的最大的path sum。
/** * 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 ma=-10000; int maxPathSum(TreeNode *root) { view(root,0); return ma; } int view(TreeNode* node,int sum){ if(node==NULL) return sum; sum = sum+node->val; int left = view(node->left,sum); int right = view(node->right,sum); ma = max(ma,max(left,right)); if(node->left!=NULL) ma = max(ma,left-sum); if(node->right!=NULL) ma = max(ma,right-sum); ma = max(ma,left+right-2*sum+node->val) ; ma = max(ma,sum); return max(max(left,right),sum); } };
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
- hibernate 分页查询求总记录数遇到的问题
- word应用
- Mysql中count(*),DISTINCT的使用方法和效率研究
- CentOS无法启动
- js取得本周,本月,上周,上月
- Binary Tree Maximum Path Sum
- FFMPEG SDK 开发介绍
- tomcat6.0的comet支持
- GPU及GPU通用计算编程模型简介
- AStar算法笔记
- linux下mysql常用基本操作
- opencv学习笔记(2)视频文件的读取与保存
- K-均值散列:学习二进制压缩码的近邻保留量化方法(董帆翻译)
- 计算机底层执行一条指令的过程