【发布时间】:2017-10-31 19:28:09
【问题描述】:
我在想办法解决这个问题时遇到了问题:
"给定一棵二叉树(每个节点都有一个 int 值)和一个 sum,如果树的路径等于给定 sum(从节点到叶子,不必是根),则返回 1 ),否则返回 0"。
我做过一个类似的问题,路径必须从根开始。 但是这里的问题是,路径可以从任何地方开始,只要它以叶子结尾..
尝试在线搜索解决方案,但我发现一些只能通过使用缓冲区来工作。
在没有缓冲区的情况下,有什么可能的解决方案吗?
提前致谢!
(更喜欢 C、C++ 语法甚至伪代码 ^.^``)
这是我的第一次尝试:
int hasPathSum(Tree tr, int sum){
return hasPathSumRec(tr.root, sum, 0);
}
int hasPathSumRec(TNode* node, int sum, int current){
int num1, num2;
current += node->data;
if (current > sum)
current = 0;
if (node->left == NULL && node->right == NULL){
if (current == sum)
return 1;
return 0;
}
else if (node->left == NULL){
return hasPathSumRec(node->right, sum, current);
}
else if (node->right == NULL){
return hasPathSumRec(node->left, sum, current);
}
else{
num1=hasPathSumRec(node->left, sum, current);
num2=hasPathSumRec(node->right, sum, current);
if (num1 > 0 || num2 > 0)
return 1;
else
return 0;
}
}
这是第二个:(但它没有通过所有节点,所以不好..)
int hasPathSum(Tree tr, int sum){
return hasPathSumRec(tr.root, sum, 0);
}
int hasPathSumRec(TNode* node, int sum, int current){
int num, num1, num2;
num = node->data;
current = num + current;
if (current > sum)
current = num;
if (node->left == NULL && node->right == NULL){
if (node->data == sum || current == sum)
return 1;
else
return 0;
}
else if (node->left == NULL){
num2 = node->right->data;
if (current + num2 > sum)
return hasPathSumRec(node->right, sum, num);
else
return hasPathSumRec(node->right, sum, current);
}
else if (node->right == NULL){
num1 = node->left->data;
if (current + num1 > sum)
return hasPathSumRec(node->left, sum, num);
else
return hasPathSumRec(node->left, sum, current);
}
else{
num1 = node->left->data;
num2 = node->right->data;
/LEFT SIDE--------------------------------------------------/
if (current + num1 > sum)
num2 = hasPathSumRec(node->left, sum, num);
else
num2 = hasPathSumRec(node->left, sum, current);
/RIGHT SIDE--------------------------------------------------/
if (current + num2 > sum)
num1 = hasPathSumRec(node->right, sum,num);
else
num1 = hasPathSumRec(node->right, sum, current);
if (num1 > 0 || num2 > 0)
return 1;
else
return 0;
}
【问题讨论】:
-
你能展示一些你已经尝试过的 C、C++ 甚至是伪代码吗?
-
添加到原帖
-
@Martin 记得检查答案是否正常,如果是则将其标记为已接受,或者评论为什么不是。
标签: c binary-tree computer-science