Binary Tree Maximum Path Sum
2015-11-20 15:47
501 查看
问题
Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.
For example:
Given the below binary tree,
Return
解答
Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.
For example:
Given the below binary tree,
1 / \ 2 3
Return
6
解答
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution1 { public: int maxPathSum(TreeNode* root) { if(!root) return 0; if(!root->left && !root->right) return root->val; else { int s1=maxPathSum(root->left); int s2=maxPathSum(root->right); max=0; path(root->left,0); int s3=max; max=0; path(root->right,0); int s4=max; if(s3+s4+root->val>s1 && s3+s4+root->val>s2) return s3+s4+root->val; else { return (s1>s2)?s1:s2; } } } public: void path(TreeNode *root,int sum) { if(root) { if(root->left==NULL && root->right==NULL) { //a.push_back(root->val); sum+=root->val; if(sum>max) max=sum; } else { sum+=root->val; path(root->left,sum); path(root->right,sum); } } } public: int max; }; /** * 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 ans; int scanT(TreeNode* root){ if(root == NULL) return 0; int left = scanT(root -> left); int right = scanT(root -> right); int val = root -> val; if(left > 0) val += left; if(right > 0) val += right; if(val > ans) ans = val; return max(root->val ,max(left + root -> val , right + root -> val)); } int maxPathSum(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function if(root == NULL) return 0; ans = root -> val; scanT(root); return ans; } };
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之使用Http协议实现文件上传功能
- 菜鸟说给菜鸟听之Beginning Linux Programming——Chapter1(1)
- [C/C++]反转链表
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- C#实现基于链表的内存记事本实例
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- sqlserver FOR XML PATH 语句的应用
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法