国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

二叉樹中最大路徑和

2019-11-10 23:03:41
字體:
供稿:網(wǎng)友

分治,動態(tài)規(guī)劃。

分析:最長的路徑一定經(jīng)過某一個點(diǎn),并且以這一個點(diǎn)為根節(jié)點(diǎn);所以可以動態(tài)遍歷每一個節(jié)點(diǎn),找到使路徑和最大的根節(jié)點(diǎn)。

C++代碼:

/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */class Solution {public: /** * @param root: The root of binary tree. * @return: An integer */ int maxPathSum(TreeNode *root) { if (root == NULL) { return 0; } vector<int> res; maxRoot(root,res); int a = res[0]; for(auto i : res){ if (i > a) { a = i; } } return a; } void maxRoot(TreeNode * root, vector<int> &res) { if (root == NULL ) { return; } int l = maxLink(root->left); int r = maxLink(root->right); res.push_back(max(0,l) + max(0,r) + root->val); maxRoot(root->left,res); maxRoot(root->right,res); } int maxLink(TreeNode * root) { if (root == NULL) { return 0; } return root->val + max(0,max(maxLink(root->left),maxLink(root->right))); }};

看網(wǎng)友的更簡潔的方法:

在一個函數(shù)的不斷遞歸中處理了最后的最大值ret,還要在最后返回一root為根節(jié)點(diǎn)的最大的一邊值。class Solution { public: /** * @param root: The root of binary tree. * @return: An integer */ int maxPathSum(TreeNode *root) { // write your code here int ret = INT_MIN; onePath(root,ret); return ret; } int onePath(TreeNode* root,int&ret) { if(root==nullptr) return 0; int l = onePath(root->left,ret); int r = onePath(root->right,ret); ret = max(ret,max(0,l)+max(0,r)+root->val); return max(0,max(l,r))+root->val; } };
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 双辽市| 民乐县| 宜君县| 漳平市| 堆龙德庆县| 长子县| 得荣县| 嘉义县| 益阳市| 丽江市| 眉山市| 贡嘎县| 延川县| 张掖市| 林芝县| 齐河县| 肃南| 开封市| 乌审旗| 永福县| 镇宁| 昌邑市| 遵化市| 池州市| 栾川县| 浦北县| 金乡县| 灌云县| 平原县| 清水河县| 连云港市| 綦江县| 渑池县| 中西区| 师宗县| 常宁市| 册亨县| 晋宁县| 平江县| 中卫市| 沁水县|