给定一个二叉树,找到最大路径和。该路径可以在树中的任何节点处开始和结束。
2017-10-10 10:34
344 查看
类是在一维数组中找到最大的子序列和。这里是根据左右子树
int maxPath;
int maxPathSum(TreeNode *root) {
maxPath=INT_MIN;
if(root==NULL)
return 0;
PreOrder(root);
return maxPath;
}
int PreOrder(TreeNode* root){
if(root==NULL)
return 0;
//如果左右 子树 小于0 就不用加
int left=max(0,PreOrder(root->left));
int right=max(0,PreOrder(root->right));
//更新最大路径
maxPath=max(maxPath,left+right+root->val);
return max(left,right)+root->val;
}
int maxPath;
int maxPathSum(TreeNode *root) {
maxPath=INT_MIN;
if(root==NULL)
return 0;
PreOrder(root);
return maxPath;
}
int PreOrder(TreeNode* root){
if(root==NULL)
return 0;
//如果左右 子树 小于0 就不用加
int left=max(0,PreOrder(root->left));
int right=max(0,PreOrder(root->right));
//更新最大路径
maxPath=max(maxPath,left+right+root->val);
return max(left,right)+root->val;
}
相关文章推荐
- 找出二叉树中和最大的路径,路径可以从任意节点开始,到任意节点结束。
- 给你一个二叉树,其中每个节点都包含一个整数值。查找总和给定值的路径数,路径不需要在根或叶子处开始或结束,但必须向下
- 说你有一个数组,其中第i个元素是第i天给定股票的价格。设计一个算法来找到最大的利润,最多可以完成两个交易。
- 给定一颗二叉树,以及其中的两个node(地址均非空),要求给出这两个node的一个公共父节点,使得这个父节点与两个节点的路径之和最小。
- 题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶结点所经过的结点形成一条路径。
- 二叉树的最大路径和 II--要求开始于根节点--则 先加上根节点,再递归左右子树。
- 给一个二叉树,每个节点都是正或负整数,如何找到一个子树,它所有节点的和最大?
- 给定一棵二叉树,找到它的最小深度。最小深度是从根节点到最近叶节点的最短路径上的节点数量
- 采用truelicense进行Java规划license控制 扩展可以验证后,license 开始结束日期,验证绑定一个给定的mac住址
- 给一个二叉树,每个节点都是正或负整数,如何找到一个子树,它所有节点的和最大?
- 给定一棵二叉树,找到它的最小深度。最小深度是从根节点到最近叶节点的最短路径上的节点数量
- 给一个由整数构成的排序二叉树, 给定一个整数, 找到二叉树中比它大并且最近它的节点。
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 有一个二叉树, 节点全部为整数,如何找到一个子树,它所有节点的和最大?要求编程序实现。
- 给定一个三角形,从顶部到底部找到最小路径和。 每个步骤,您可以移动到下面的行上的相邻数字。
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 给定一棵二叉树,二叉树每个节点的值唯一,从根节点开始找出路径上的所有节点的节点值之和等于规定值的路径
- 给定一个充满非负数的网格,找到从左上到右下的路径,最小化沿其路径的所有数字的总和。只能向下或向右移动。
- 使用truelicense进行Java程序license控制 经过扩张可以验证license 开始结束日期,验证绑定给定mac地址
- 每天一道LeetCode-----计算二叉树的最大路径和,路径只需要从一个节点到达另一个节点,无其他要求