算法训练:Binary Tree Maximum Path Sum

来源:互联网 发布:c 网络编程基础 编辑:程序博客网 时间:2024/06/06 07:01

题目链接:https://leetcode.com/problems/binary-tree-maximum-path-sum/#/description


题目描述:

      给定一棵二叉树,求其最大路径和 这里的路径可以是从任何一个节点到达另一个节点。  

解题思路:

    最大路径和的可能性:

      (1)根节点

     (2)根节点+右子树最大路径和 

     (3)根节点+左子树最大路径和

     (4)根节点+右子树最大路径和+左子树最大路径和

     (5)右子树最大路径和 

     (6)右子树最大路径和 

    分别遍历左子树和右子树得到左子树和右子树的最大路径和,然后比较以上四种情况,其最大值赋给maxval      

    class Solution {      public:      int maxSum(TreeNode* root, int& maxval) {          if (root == NULL) return 0;                    int leftsum = maxSum(root->left,maxval);    //递归求左支路的最大路径和          int rightsum = maxSum(root->right,maxval);  //递归求右支路的最大路径和          //当前路径和        int currSum = max(max(leftsum + root->val, rightsum + root->val), root->val);        int currMax = max(max(currSum, leftsum + rightsum + root->val),max(leftsum,rightsum));        //用当前最大来更新全局最大        maxval = max(currMax, maxval);        return currSum;//返回当前路径和    }          int maxPathSum(TreeNode* root) {          if (root == NULL) return 0;          int maxval=0;        maxSum(root,maxval);          return maxval;      }    };

运行结果:

Your Input
[-1,5,3,8,20,6,-7] 
Your answer
33
Expected answer
33