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);的时候会进行比较过滤。
  可以看出,思路简洁,巧妙!
  接下来,我们来讨论讨论话务预测的项目~

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 车检过期了1周怎么办 超过检车几天了怎么办 驾驶证扣两个6分怎么办 行驶证检验有效期过期怎么办 驾驶证被扣26分怎么办 c1驾驶证扣26分怎么办 驾驶证被扣6分后怎么办 c1驾照年审过期一天怎么办 审驾照时间过了怎么办 b2驾驶证扣了分怎么办 a2驾照逾期未审怎么办 中学生只想打游戏不肯学习怎么办 汽车4年未年检怎么办 2年没有验车怎么办 驾驶证过期2年半怎么办 审车逾期一个月怎么办 摩托车驾驶证年审过期一个月怎么办 摩托车驾驶证记满12分怎么办 b2驾驶证扣2分该怎么办 b2扣6分以上怎么办 审驾照晚了3天怎么办 考驾驶证3年到期怎么办 学习驾驶证明过期了怎么办 a2扣了12分怎么办 驾照a2扣6分了怎么办 a2本扣9分怎么办 驾驶证分扣3分怎么办? 异地换驾驶证没有居住证怎么办 b2开c1车扣分怎么办 驾照五次没考过怎么办 大车行驶证丢了怎么办 车的产权证丢了怎么办 车子行驶证掉了怎么办 定期的存折丢了怎么办 存折密码输错6次怎么办 营业执照原件丢失怎么办怎么注销 违章扣了14分怎么办 c1驾驶本过期了怎么办 考驾照没带身份证怎么办 上海扣满12分怎么办 美宝旅行证丢失怎么办