Leetcode 124. 二叉树的最大路径和【递归】

问题描述

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
在这里插入图片描述

解题报告

以某一子树的根节点为研究对象,如果最大路径经过该子树,则必定 经过该子树的根节点以及该子树 左右子树 中的某一子树
实现时:

  • 设置全局变量 val,它记录了整棵树的最大路径和。
  • 递归搜索每棵子树的根节点,其返回经过该子树根节点的的最大路径和【该路径只经过该子树的某一子树】。
  • 在递归的过程中,更新 val 的值【在本身的值以及经过递归子树的根节点(是否包含 递归子树 左右子树的最大路径和 取决于 经过左右子树的最大路径和 是否大于0)这两者中取最大值】
  • 具体参考代码

实现代码

class Solution {
public:
    int maxPathSum(TreeNode* root, int &val)
{
	if (root == nullptr) return 0;
	int left = maxPathSum(root->left, val);
	int right = maxPathSum(root->right, val);
    
	int lmr = root->val + max(0, left) + max(0, right);
	int ret = root->val + max(0, max(left, right));
	val = max(val, lmr);
    cout<<root->val<<" "<<left<<" "<<right<<" "<<lmr<<" "<<ret<<" "<<val<<endl;
	return ret;
}

int maxPathSum(TreeNode* root) 
{
	int val = INT_MIN;
	maxPathSum(root, val);
	return val;
}

// 作者:ikaruga
// 链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/solution/er-cha-shu-zhong-de-zui-da-lu-jing-he-by-ikaruga/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
};

2 ^{2}

参考资料

[1] Leetcode 124. 二叉树的最大路径和
[2] 题解区:ikaruga

猜你喜欢

转载自blog.csdn.net/qq_27690765/article/details/106984844