LeetCode刷题-124. 二叉树中的最大路径和
题目链接:124. 二叉树中的最大路径和
¶题解:
很是巧妙的递归求解路径问题!
¶题目简述:
非空二叉树返回最大路径和!路径定义为从任意一个节点出发到任意一个节点序列!
¶题解:
思考: 如何将所有路径遍历全面(注意:路径是任意点到任意点,不一定是要经过根节点或者叶子节点)!
- 对于一条路径,该路径的最高点是一定的,所以我们来枚举它的最高点!
对于该最高点的路径有几种情况:res = max(res, left + root->val + right)
- 根节点
- 根节点和左子树最大值
- 根节点和右子树最大值
- 根节点和左右子树最大值
对于计算左右子树的最大值:
int dfs(TreeNode* root)
:计算当前根节点的最大路径
return root->val + max(left, right)
:返回根节点和左右子树最大值的和left = max(0, dfs(root->left))
:保证往下走是可以增大路径的,和0取一下max
。若为负值,即不走当前路径right = max(0, dfs(root->right))
:同理
时间复杂度:每个节点遍历一次,为O(n)
¶AC代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论