zoukankan      html  css  js  c++  java
  • [leetCode]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.

    思想主要是使用递归,获得节点左枝和右枝的最大值,然后和自己的值相加,如果大于最大值则替换。

    同时要注意的是:如果该节点有父节点,那么只能返回self.val+left.val或者self.val+right.val. 

    详细参考:http://www.cnblogs.com/shawnhue/archive/2013/06/08/leetcode_124.html

    C++代码

    /**
     * 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 maxSum;
        bool hasParent;
        Solution(){ maxSum = -999;}
        int maxPathSum(TreeNode *root) {
            maxNodeSum(root,false);
            return maxSum;
        }
    private:
        int maxNodeSum(TreeNode *root, bool hsaParent){
            int leftSum,rightSum,curmax;
            leftSum = rightSum = curmax = 0;
            TreeNode *cur = root;
            if(cur == NULL) return 0;
            if(cur->left != NULL) leftSum = maxNodeSum(cur->left,true);
            if(cur->right != NULL) rightSum = maxNodeSum(cur->right,true);
            if(leftSum < 0)    leftSum = 0;
            if(rightSum < 0) rightSum = 0;
            curmax = cur->val+leftSum+rightSum;
            if(maxSum < curmax) maxSum = curmax;
            if(hasParent) curmax = cur->val + ((leftSum > rightSum)?leftSum : rightSum);        
            return curmax;
        }
    };
    艰难的成长
  • 相关阅读:
    网络通信之 字节序转换原理与网络字节序、大端和小端模式
    [C/C++]大小端字节序转换程序
    面向对象和面向过程的区别
    编译libjpeg
    地形系统lod
    c/c++ 代码中使用sse指令集加速
    个人作品- 蘑菇大战
    个人作品- 几何战争
    Obj格式模型 读取
    各大引擎矩阵的矩阵存储方式 ----行矩阵 or 列矩阵
  • 原文地址:https://www.cnblogs.com/marylins/p/3584037.html
Copyright © 2011-2022 走看看