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

    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.

    地址:https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/

    算法:用递归来解决。首先,最大的路径和出现在以下三种情况:1)出现在左子树中;2)出现在右子树;3)经过根节点,在这种情况下,相当与左边从根节点到叶节点的最大路径加上右边从根节点到叶节点的最大路径。

    对于第三种情况也可以用递归来解决。代码:

     1 /**
     2  * Definition for binary tree
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     int maxPathSum(TreeNode *root) {
    13         if(!root){
    14             return INVALID;
    15         }
    16         int left = maxPathSum(root->left);
    17         int right = maxPathSum(root->right);
    18         int mid = root->val;
    19         int mid_left =maxLoadSum(root->left);
    20         if(mid_left > 0){
    21             mid += mid_left;
    22         }
    23         int mid_right = maxLoadSum(root->right);
    24         if(mid_right > 0){
    25             mid += mid_right;
    26         }
    27         if(left != INVALID && left > mid){
    28             mid = left;
    29         }
    30         if(right != INVALID && right > mid){
    31             mid = right;
    32         }
    33         return mid;
    34     }
    35     int maxLoadSum(TreeNode *root){
    36         if(flag.find(root) != flag.end()){
    37             return flag[root];
    38         }
    39         if(!root){
    40             flag[root] = -1;
    41             return -1;
    42         }
    43         int sum = root->val;
    44         int left = maxLoadSum(root->left);
    45         int right = maxLoadSum(root->right);
    46         if (left > right){
    47             right = left;
    48         }
    49         if(right > 0){
    50             sum += right;
    51         }
    52         flag[root] = sum;
    53         return sum;
    54     }
    55     static const int INVALID = 0x7FFFFFFF;
    56     map<TreeNode *,int> flag;
    57 };
  • 相关阅读:
    fastjson生成和解析json数据
    fastJson API
    js实现class样式的修改、添加及删除的方法
    jquery ajax局部加载方法介绍
    jquery 动态添加和删除 ul li列表
    spring mvc3中的addFlashAttribute方法
    Spring MVC 3 : 一次上传多个文件
    pring mvc 批量上传+文件上传
    SpringMVC批量上传
    Android ADT Bundle(Eclipse with ADT) ADT R23
  • 原文地址:https://www.cnblogs.com/boostable/p/leetcode_binary_tree_maximum_path_sum.html
Copyright © 2011-2022 走看看