zoukankan      html  css  js  c++  java
  • Binary Tree Maximum Path Sum

    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.

    思路:这道题就是从二叉树任意节点开始达到另一个结点的最大路径和,有点像求最大连续子序列和,而这题就比其复杂的多了。注意不能从根结点开始处理,否则会出问题的。我们应该从底往上开始递归搜索,分别求出左子树最大路径和,根结点的值以及右子树最大路径和,然后求出以下三者的最大的就是最大路径和:根结点的值、根结点+左子树最大路径和、根结点+右子树最大路径和。

    /**
     * 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 getMaxSum(TreeNode *root,int &maxSum)
        {
            if(root==NULL)
                return 0;
            int left=getMaxSum(root->left,maxSum);
            int right=getMaxSum(root->right,maxSum);
            int CurSum=root->val;
            if(left>0)
                CurSum+=left;
            if(right>0)
                CurSum+=right;
            maxSum=max(maxSum,CurSum);
            return root->val+max(max(0,left),right);
        }
        int maxPathSum(TreeNode *root) {
            if(root==NULL)
                return 0;
            int maxSum=INT_MIN;
            getMaxSum(root,maxSum);
            return maxSum;
        }
    };
  • 相关阅读:
    #include
    算法导论 Chapter 9.3 Selection in worstcase linear time
    算法导论 Exercises 9.36
    算法导论 Exercises 9.37
    C++实现Ping
    算法导论 Exercises 9.39
    如何计算毫秒级的时间差
    如何产生 [0, 2147483647] 之间的随机数
    算法导论 Exercises 9.38
    KMP算法学习&总结
  • 原文地址:https://www.cnblogs.com/awy-blog/p/3812131.html
Copyright © 2011-2022 走看看