Leetcode 124. 二叉树中的最大路径和
递归
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int ans = INT_MIN;int dfs(TreeNode* node) {if (node == nullptr) return 0;int left = max(dfs(node->left), 0); // 左子树最大链和int right = max(dfs(node->right), 0); // 右子树最大链和ans = max(node->val + left + right, ans); // 两条链拼成路径return max(left, right) + node->val;}int maxPathSum(TreeNode* root) {dfs(root);return ans;}
};
时间复杂度:O(n),其中 n 为二叉树的节点个数。
空间复杂度:O(n)。最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。