C 功能中的独立总和
Independent sum in C++ function
我希望我的程序在距离rb-tree的根部距离= n的节点中计算一个值的总和。我有一个递归功能可以找到这样的节点,但我不知道如何总结它们。外观:
void nSum (RBTreeNode* B, int n) {
if (B == NULL || n < 0)
return;
if (n == 0) {
Integer* v = (Integer*) B->value;
S += v->number // there I want to make an independent sum of them
return;
}
nSum (B->right, n-1);
nSum (B->left, n-1);
}
我很陌生,我还没有找到任何答案。
尝试以下内容:
void nSum (RBTreeNode* B, int n, vector <int> sum) {
if (B == NULL || n < 0)
return;
if (n == 0) {
int* v = (int*) B->value;
sum.push_back(v->number);
return;
}
nSum (B->right, n-1, sum);
nSum (B->left, n-1, sum);
}
,但是总和为空
当您声明这样的函数时:
void nSum (RBTreeNode* B, int n, vector <int> sum)
函数获取的向量是您传递的向量的副本。因此,如果nsum修改了向量,那对称为nsum的代码中的向量没有影响。这称为按值传递。
您也可以通过引用传递,这将使对传递的同一向量的访问权限,并且在NSUM中进行的任何修改都会影响调用代码中的向量。您通过参考的方式就是这样:
void nSum (RBTreeNode* B, int n, vector <int>& sum)
注意"&amp;"。但是矢量不是必需的,您只需要跟踪总和即可。您可以做到这一点:
void nSum (RBTreeNode* B, int n, int& sum)
现在每次称为nsum时都可以修改sum int,并且会影响函数之外的值。
这个总和可以用简单的递归公式表示(许多与二进制树结构有关的事物也是如此):
S(root, 0) = root->value;
S(root, n) = S(root->left_child, n - 1) + S(root->right_child, n - 1);
您可能会从公式中注意到,仅仅调用递归功能两次是不够的。您需要实际总结结果。这意味着该功能必须返回甚至可以求和的东西:
int nSum (RBTreeNode* B, int n) {
// Take a stab at completing it yourself
return nSum(B->left, n-1) + nSum(B->right, n-1);
}
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 独立读取-修改-写入顺序
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 原子功能无锁可以更改两个独立的存储位置
- C 功能中的独立总和
- 使用模板独立enable_if时,链接器错误带有模板的朋友功能
- 什么是独立功能
- 在mac上用c++编写独立游戏程序需要哪些软件(从软件功能而非名称来看)
- C++中的独立功能/数据