1. 程式人生 > >LeetCode(124) Binary Tree Maximum Path Sum 二叉樹的最大路徑和 (如何遞迴?)

LeetCode(124) Binary Tree Maximum Path Sum 二叉樹的最大路徑和 (如何遞迴?)

對任意一個節點,當前節點值cur,
左子樹,一條路徑值 > 0 , cur += left
右子樹,一條路徑值 > 0 , cur += right

這樣可以可以遍歷求得最大的路徑和。

ac程式碼

/**
 * 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 INF = 0x7fffffff; int MIN_INF = -INF-1; int maxVal; int dfs(TreeNode* root) { if(root == NULL) return 0; else{ int leftM = dfs(root->left); int rightM = dfs(root->right); int rootVal = root->val; int
cur = rootVal; if(leftM > 0) cur += leftM; if(rightM > 0) cur += rightM; if(cur > maxVal) maxVal = cur; return max(rootVal, max(rootVal+leftM, rootVal+rightM)); } } int maxPathSum(TreeNode* root) { if
(root == NULL) return 0; maxVal = MIN_INF; dfs(root); return maxVal; } };

注意遞迴思路

求二叉樹中兩個節點之間的最大距離。

(1)如果二叉樹為空,返回0
(2)如果二叉樹不為空,最大距離要麼是左子樹中的最大距離,要麼是右子樹中的最大距離,要麼是左子樹節點中到根節點的最大距離+右子樹節點中到根節點的最大距離

思路同上,程式碼也同上,只不過要換成距離(也就是深度)