Binary Tree Maximum Path Sum
来源:互联网 发布:在哪里买淘宝小号 编辑:程序博客网 时间:2024/05/21 21:46
原题
https://leetcode.com/problems/binary-tree-maximum-path-sum/。
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6.
翻译:在一棵二叉树中找到和最大的一条路径()这条路径起点和终点在二叉树的某个位置就行。
思路
这个问题看到以后其实没什么思路,然后在Discuss中看到了下面的代码:
/** * 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 { int flag = INT_MIN;public: int maxPathSum(TreeNode* root) { getSum(root); return flag; } int getSum(TreeNode* root) { if(root == NULL) return 0; int a = getSum(root->left); int b = getSum(root->right); flag = max(flag , root->val + a + b); return max(0,root->val + max(a,b)); }};
然后想了想,果然不错。有必要解释一下这一段代码。
代码解释
看到INT_MIN这种值,肯定就是用来记录最大值的标记。
getSum函数是干什么的呢——他求的是包含root节点的,从root到叶节点的和最大的路径(从root开始,不一定要到叶子节点,甚至可以不包含root),这个路径的最小值是0(大不了不包含任何节点)。
那么函数的语句就可以理解了,return max(0,root->val + max(a,b)),就是返回0或者根节点的值加上两个子树最大的getSum的值。
并且flag = max(flag , root->val + a + b);就是用来不断的刷新可能的最大的值(这里root->val + a + b就是过root的路径的最大值,当然路径可能不过root,getSum(root->left);和getSum(root->right);的时候会进行比较过滤。
可以看出,思路简洁,巧妙!
接下来,我们来讨论讨论话务预测的项目~
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- 【Android进阶篇】自定义应用权限
- 用nexus搭建maven私服
- Android AndroidManifest 清单文件以及权限详解
- Intellij IDEA 快捷键整理(TonyCody)
- 【Leetcode】Binary Tree Right Side View #199
- Binary Tree Maximum Path Sum
- atitit.javascript调用java in swt attilax 总结
- 关于git的使用记录
- 字符串最后一个单词的长度
- 字符串加解密
- 友善mini2440:uboot和内核的移植
- 学英语
- 合唱队
- (练习用)挑7