#include"../Seminar08/tree-utils.h" // pair.first -> Сумата до момента // pair.second - Броя на наследниците, които изпълняват условието ключовете им да влизат в интервала в поддървото std::pair findSumHelper(const Tree* t, int x, int y) { if(t == nullptr) return std::make_pair(0, 0); std::pair l = std::make_pair(0, 0); std::pair r = std::make_pair(0, 0); if(t->data >= x) l = findSumHelper(t->left, x, y); if(t->data <= y) r = findSumHelper(t->right, x, y); bool oddChildren = ((l.second + r.second) % 2); int sum = l.first + r.first; int count = l.second + r.second + (t->data >= x && t->data <= y); if(oddChildren) sum += t->data; return std::make_pair(sum, count); } int findSum(const Tree* t, int x, int y) { return findSumHelper(t, x, y).first; } int main() { Tree* root = new Tree(50); Tree* n1 = new Tree(25); Tree* n2 = new Tree(75); Tree* n3 = new Tree(12); Tree* n4 = new Tree(30); Tree* n5 = new Tree(60); Tree* n6 = new Tree(85); Tree* n7 = new Tree(52); Tree* n8 = new Tree(70); root->left = n1; root->right = n2; n1->left = n3; n1->right = n4; n2->left = n5; n2->right = n6; n5->left = n7; n5->right = n8; std::cout << findSum(root, 30, 75); }