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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章