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

    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 must contain at least one node and does not need to go through the root.
    
    For example:
    Given the below binary tree,
    
           1
          / 
         2   3
    
    Return 6. 
    

    解析

    • 这一题有点类似一维数组求最大子序列的和,一维最大子序列和从一维的角度判断,这里二叉树有左右子树考虑。help(root)方法的返回值的意思就是求得root节点到该root子孙的任意一节点的最大路径值(注意区别这里root和根节点root,这里root是递归下去的节点)。在这个函数里还比较了以root为路径节点;

    • 2019.05.13: 这里的最大和路径可以不经过根节点;在递归的时候,需要一个全局变量记录当前结点作为根节点时的最大路径和;然后递归返回的是包含当前结点子树的最大值;

    class Solution_124 {
    
    	int sum = INT_MIN;
    
    	int help(TreeNode* root)
    	{
    		if (!root)
    		{
    			return 0;
    		}
    		int left = max(0, help(root->left));   // 已经保证左右子树非负,舍弃掉一些分支;
    		int right = max(0, help(root->right));
    
    		sum = max(sum, left + right + root->val); //包括当前节点在路径上的最大值,和不包括当前节点在路径上的最大值,求两者中较大的;
    
    		return max(left, right) + root->val; //返回以当前节点为根的路径最大值;
    	}
    
    public:
    	int maxPathSum(TreeNode *root) {  //考虑有负节点情况
    
    		if (!root)
    		{
    			return 0;
    		}
    
    		help(root);
    
    		return sum;
    	}
    };
    
    

    题目来源

  • 相关阅读:
    子元素过滤器nth-child解释
    jquery属性选择器中|value和^value的区别
    [转]float,double和decimal类型
    postsharp初体验
    [札记]IL经典指令解析之方法调度
    Oracle问题诊断过程常用SQL
    在chrome浏览器中 页面生成二维码
    音视频实例
    html5 新增input类型与属性
    html5 form-Validity验证函数
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8182775.html
Copyright © 2011-2022 走看看