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

    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

    路径可以从任意节点开始,到任意节点.

    =====

    思路:

    这道题的解法,来自网络leetcode150题集合,

    利用dfs遍历树的方式,传递每个树父子节点间的路径大小;

    利用一个全局遍历来时记住max_sum来记录已经找到的最大的路径值,

    最难理解的是怎么在 dfs遍历树的过程,传递路径信息?

    -----

    借用"最大连续子序列和"问题的思路,array只有一个方向,

    但是Tree有左右两个方向,我们需要比较两个方向上的值.

    先算出左右子树的结果L和R.

      如果L>0,那么对后序结果是有利的,后序中加上L,(不是向max_sum中,而是向如节点中)

      如果R>0,那么对后序结果是有利的,加上R

    ---

    ==========

    代码如下:

    /**
     * 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 help_maxPathSum(int &max_sum,TreeNode *root){
            if(root==nullptr) return 0;
            int l = help_maxPathSum(max_sum,root->left);
            int r = help_maxPathSum(max_sum,root->right);
            int sum = root->val;
            if(l>0) sum += l;
            if(r>0) sum += r;
            max_sum = max(max_sum,sum);
            return max(r,l)>0? max(r,l)+root->val:root->val;//只能向上传递 左子树或者  右子树的有利值
        }
        int maxPathSum(TreeNode* root) {
            int max_sum = INT_MIN;
            help_maxPathSum(max_sum,root);
            return max_sum;
        }
    };
  • 相关阅读:
    中断 异常 系统调用的比较
    线性结构-线性表
    数据结构引例
    友链
    投喂
    给出两个单词(start和end)与一个字典,找出从start到end的最短转换序列
    C++类内存分布
    内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
    C++内存管理学习笔记(7)
    C++内存管理学习笔记(6)
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5618517.html
Copyright © 2011-2022 走看看