leetcode 124. Binary Tree Maximum Path Sum 最大路径和 + DFS深度优先搜索
来源:互联网 发布:业务员管理客户软件 编辑:程序博客网 时间:2024/06/05 10:33
Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6.
这道题求的是通过父子关系连接起来的最大的路径和,路径的起始结点不一定是叶子节点。
我看了这道题好久才明白,那么我们可以利用DFS深度优先搜索来得到左右结点的最大sum,然后更新最大的路径sum。
建议和leetcode 437. Path Sum III 深度优先遍历DFS 和leetcode 687. Longest Univalue Path 深度优先遍历DFS 一起学习
代码如下:
/*class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}*//* * 函数递归返回的是某一路径的最大sum * 那么对于某一个结点,更新相关详细即可 * 如果只是一个节点,那么当然就是这个节点的值了. * * */public class Solution{ int MaxPathSum = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { maxPathSumByRecursion(root); return MaxPathSum; } public int maxPathSumByRecursion(TreeNode root) { if(root==null) return 0; else { int leftMax = maxPathSumByRecursion(root.left); int rightMax = maxPathSumByRecursion(root.right); int tmp = root.val; if(leftMax>0) tmp += leftMax; if(rightMax>0) tmp += rightMax; //这里更新最大路径值 MaxPathSum = Math.max(MaxPathSum, tmp); //这里返回的是当前左孩子或者右孩子的最大的sum,并不是某一条路径的最大sum return Math.max(root.val, Math.max(leftMax + root.val, rightMax + root.val)); } }}
下面手C++的做法,就是DFS深度优先遍历的做法,这里要注意两个问题:
我们是用DFS递归来计算某一个路径的sum,然后在递归计算中间计算比较最大的路径值
代码如下:
#include <iostream>#include <vector>#include <algorithm>#include <climits>using namespace std;/*struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};*/class Solution {public: int maxSum = numeric_limits<int>::min(); int maxPathSum(TreeNode* root) { if (root == NULL) return 0; byDFS(root); return maxSum; } int byDFS(TreeNode* root) { if (root == NULL) return 0; else { int left = byDFS(root->left); int right = byDFS(root->right); int tmp = root->val; if (left > 0) tmp += left; if (right > 0) tmp += right; maxSum = max(maxSum, tmp); return max(root->val,max(left+root->val,right + root->val)); } }};
阅读全文
0 0
- leetcode 124. Binary Tree Maximum Path Sum 最大路径和 + DFS深度优先搜索
- LeetCode 124. Binary Tree Maximum Path Sum(二叉树最大路径和)
- Leetcode 124. Binary Tree Maximum Path Sum 最大路径和 解题报告
- [leetcode][dfs] Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum 二叉树最大路径和
- 树的最大路径和 Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum 二叉树最大路径和 @LeetCode
- LeetCode(Binary Tree Maximum Path Sum) 在二叉树中找出一条和最大的路径
- Leetcode 124 Binary Tree Maximum Path Sum 二叉树最大路径和
- 【LeetCode】Binary Tree Maximum Path Sum二叉树中的最大路径和
- leetcode解题之124. Binary Tree Maximum Path Sum Java版 (二叉树的最大路径和)
- 124. Binary Tree Maximum Path Sum 二叉树上的最大路径和
- 【二叉树】最大路径和【124. Binary Tree Maximum Path Sum】
- LeetCode 124. Binary Tree Maximum Path Sum
- [LeetCode]*124.Binary Tree Maximum Path Sum
- [Leetcode] 124. Binary Tree Maximum Path Sum
- [leetcode] 124. Binary Tree Maximum Path Sum
- [leetcode] 124. Binary Tree Maximum Path Sum
- log4j日志文件配置
- c++primer plus阅读笔记(一)
- windows读写锁实现
- 线程池简介
- 前端国际化,用jquery.i18n完成中英文切换
- leetcode 124. Binary Tree Maximum Path Sum 最大路径和 + DFS深度优先搜索
- at javax.swing.ImageIcon.<init>(Unknown Source)
- JsonHelper 操作帮助类
- redis的哨兵集群模式
- [Android Exercise]Fragment新闻客户端例子拆解PART.2—带你记忆Fragment的使用
- 【JPA 级联保存/级联删除】@OneToMany 一对多(单向和双向)注解
- RocketMQ架构和JVM / Linux配置
- Linux高级命令汇总
- 最新版勤哲Excel服务器V2016.12.0.292无限用户支持手机APP,微信,网页等功能不绑定电脑,任意安装,支持后续升级。 这个版本发布过之后,再发布新的版本需要到下个月的中下旬,老朋友可以使