博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leecode第一百二十四题(二叉树中的最大路径和)
阅读量:5278 次
发布时间:2019-06-14

本文共 926 字,大约阅读时间需要 3 分钟。

/** * 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 {private:    int res = INT_MIN;    int getMax(TreeNode* r) {        if(r == NULL)            return 0;        int left = max(0, getMax(r->left)); // 如果子树路径和为负则应当置0表示最大路径不包含子树        int right = max(0, getMax(r->right));        res = max(res, r->val + left + right); // 判断在该节点包含左右子树的路径和是否大于当前最大路径和        return max(left, right) + r->val;    }public:    int maxPathSum(TreeNode* root) {        /**        对于任意一个节点, 如果最大和路径包含该节点, 那么只可能是两种情况:        1. 其左右子树中所构成的和路径值较大的那个加上该节点的值后向父节点回溯构成最大路径        2. 左右子树都在最大路径中, 加上该节点的值构成了最终的最大路径        **/        getMax(root);        return res;    }    };

分析:

做不出来啊,这是网友的思路,我想到了递归,但是没想到全局变量,导致我一直在想判断到底是左右节点都保留,还是只留最大的,没想到啊。唉,我还是不够看的。

转载于:https://www.cnblogs.com/CJT-blog/p/10643876.html

你可能感兴趣的文章
Play Framework框架安装指南
查看>>
Java:对象的强、软、弱和虚引用
查看>>
Dynamics 365 CRM large instance copy
查看>>
冒烟测试
查看>>
long int c = int a * int b的问题
查看>>
PHP生成PDF文档
查看>>
C# 文件下载四方法
查看>>
C++第7章总结
查看>>
此地址使用了一个通常用于网络浏览以外目的的端口。出于安全原因,Firefox 取消了该请求。...
查看>>
Vue.js系列之项目结构说明
查看>>
windows连接oracle数据库
查看>>
ListCtrl控件的使用
查看>>
线程--demo3
查看>>
一个学通信的人写的情书
查看>>
590. N-ary Tree Postorder Traversal - LeetCode
查看>>
一线架构师实践指南(一)
查看>>
Kendo UI开发教程(23): 单页面应用(一)概述
查看>>
转载:ios程序编译链接参数 all_load 的 ld duplicate symbol _main 的 bug及修复
查看>>
C - 思考使用差分简化区间操作
查看>>
HDU-2588-GCD (欧拉函数)
查看>>