C++ cpp数据类型运行时溢出
给定一个非空二叉树,求最大路径和 对于这个问题,路径被定义为沿着父子连接从某个起始节点到树中任何节点的任意节点序列。路径必须至少包含一个节点,并且不需要穿过根节点C++ cpp数据类型运行时溢出,c++,C++,给定一个非空二叉树,求最大路径和 对于这个问题,路径被定义为沿着父子连接从某个起始节点到树中任何节点的任意节点序列。路径必须至少包含一个节点,并且不需要穿过根节点 -10 / \ 9 20 / \ 15 7 ans=42 我是初学者。如果可能的话,只帮助cpp。我非常清楚逻辑。我想知道我的数据类型知识有什么问题 下面maxpathsum函数必须返回int值,我使用long-long只是为了避免整数溢出,然后在返回最终答案之前键入它 输入:[1,2](1是两个
-10
/ \
9 20
/ \
15 7
ans=42
我是初学者。如果可能的话,只帮助cpp。我非常清楚逻辑。我想知道我的数据类型知识有什么问题
下面maxpathsum函数必须返回int值,我使用long-long只是为了避免整数溢出,然后在返回最终答案之前键入它
输入:[1,2](1是两个的父项)预期输出:3
实际输出:每次leetcode上的垃圾值,但有时给出正确的输出,如3,我也知道它的数据类型错误。当我尝试在VisualStudio或代码块上运行它时,我得到了正确的输出,即3。下面的代码有什么问题
long long int solve(TreeNode* root,long long int &res) {
if (root == NULL)return INT_MIN;
long long int left = solve(root->left, res);
long long int right = solve(root->right, res);
//cout << left + right;
long long int temp = max(left, max(right, left + right)) + root->val;
res = max(1LL*res, temp);
res = max(1LL*res,1LL* root->val);
return max(left + 1LL * root->val, max(right + 1LL * root->val, 1LL * root->val));
}
//below function must return int value
// i am using long long just to avoid to integer overflow
int maxPathSum(TreeNode* root) {
long long int res;
if(root==NULL)return 0;
if(root->left==NULL && root->right==NULL)return root->val;
solve(root, res);
int ans = (int)res;
return ans;
}
long-long int-solve(TreeNode*root,long-long-int&res){
if(root==NULL)返回INT_MIN;
long long int left=求解(根->左,res);
long-long-int-right=solve(根->右,res);
//库特瓦尔;
res=最大值(1LL*res,温度);
res=最大值(1LL*res,1LL*root->val);
返回最大值(左+1LL*根->值,最大值(右+1LL*根->值,1LL*根->值));
}
//下面的函数必须返回int值
//我使用long-long只是为了避免整数溢出
int maxPathSum(树节点*根){
长整型;
if(root==NULL)返回0;
如果(root->left==NULL&&root->right==NULL)返回root->val;
求解(根,res);
int ans=(int)res;
返回ans;
}
请使用0。这是一个很大的负数。您没有在
maxPathSum
函数中初始化res
。非常感谢您,先生@chrismmar您确定吗?他遇到了人满为患的问题。你确定这不是原因吗?@JosephLarson在问题中使用了max()
,0
是这里的正确返回值,而不是INT\u MIN
。
if (root == NULL)return INT_MIN;