标签:style blog color 使用 io for ar art
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.
思路:题目要求求解最大的路径和:我们先只考虑以node为根的子树,显然必定包含node的最大和路径为;{ node }、{ subPath(node->left), node }、{ node, subPath(node->right) }、{ subPath(node->left), node, subPath(node->right) }四个中值最大的那条路径。因此,我们只需求出subPath(node->left)和subPath(node->right),即可确定必定包含node的最大和路径。显然,问题的规模变小了。
我们再来考虑node的父节点。显然,为了确定必定包含node父节点的最大和路径,subPath(node)应返回:{ node }、{ subPath(node->left), node }、{ node, subPath(node->right) }三个中值最大的那条路径的值。
该问题本质上是二叉树的后序遍历。我们使用递归可以获得非常优雅的解法。同时我们需要使用一个全局变量存储找到的最大路径和。
1 class Solution { 2 public: 3 int maxPathSum( TreeNode *root ) { 4 if( !root ) { return 0; } 5 maxSum = root->val; 6 maxPathSumSub( root ); 7 return maxSum; 8 } 9 private: 10 int maxPathSumSub( TreeNode *node ) { 11 int left = 0, right = 0; 12 if( node->left ) { left = maxPathSumSub( node->left ); } 13 if( node->right ) { right = maxPathSumSub( node->right ); } 14 int curMax = node->val + max( 0, left ) + max( 0, right ); 15 if( maxSum < curMax ) { maxSum = curMax; } 16 return node->val + max( 0, max( left, right ) ); 17 } 18 int maxSum; 19 };
Binary Tree Maximum Path Sum,布布扣,bubuko.com
标签:style blog color 使用 io for ar art
原文地址:http://www.cnblogs.com/moderate-fish/p/3911331.html