124 Binary Tree Maximum Path Sum 求二叉树的最大路径和

来源:互联网 发布:淘宝上有没有猛将气 编辑:程序博客网 时间:2024/05/16 00:30

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.

分析
给定一颗二叉树,求其最大路径和。对于二叉树,算法大多可以选择递归解决,此题也不例外。
思路参考
如果只是一个节点,那么当然就是这个节点的值了.
如果这个作为root,那么最长路应该就是..
F(left) + F(right) + val…当然如果left,或者right<0就不用加了的= =
从下往上递归遍历…
如果不这个不是root,那么就不能把left和right加起来了…因为只是一条路…
代码如下:

    /**      * Definition for a binary tree node.      * struct TreeNode {      *     int val;      *     TreeNode *left;      *     TreeNode *right;      *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}      * };      */      class Solution {      public:          int maxVal = INT_MIN;          int maxPathSum(TreeNode* root) {              if (root == NULL)                  return 0;              maxSum(root);              return maxVal;          }          /*递归函数*/          int maxSum(TreeNode *root)          {              if (root == NULL)                  return 0;              /*求以root为根的当前子树的最大路径和*/              int curVal = root->val;              int lmaxSum = maxSum(root->left), rmaxSum = maxSum(root->right);              if (lmaxSum > 0)                  curVal += lmaxSum;              if (rmaxSum > 0)                  curVal += rmaxSum;              if (curVal > maxVal)                  maxVal = curVal;              /*返回以当前root为根的子树的最大路径和*/              return max(root->val, max(root->val + lmaxSum, root->val + rmaxSum));          }      };  
阅读全文
0 0
原创粉丝点击