Таким образом, задача состоит в том, чтобы написать функцию, которая возвращает сумму элементов BST, которая больше, чем сумма их прямых потомков. Не считайте листовые узлы. Я сделал это таким образом, базовый случай, когда дерево пустое, возвращает 0, а если у него нет сыновей, также возвращает 0. Затем я проверил, имеет ли узел один или два дочерних элемента, и условие для сумм.
int sum(struct node* root)
{
if (root== NULL) return 0;
if (root->right == NULL && root->left==NULL) return 0;
if (root->right!= NULL && root->left != NULL)
{
if (((root->right)->key + (root->left)->key) < root->key) return root->key;
}
if (root->right != NULL && root->left==NULL)
{
if ((root->right)->key< root->key) return root->key;
}
if (root->left != NULL && root->right==NULL)
{
if ((root->left)->key < root->key) return root->key;
}
else return sum(root->right) + sum(root->left);
}
Main:
struct node* root = NULL;
add(&root,-4);
add(&root,6);
add(&root,8);
add(&root,-11);
add(&root,5);
add(&root,7);
add(&root,-20);
printf("%d",sum(root));
Должно возвращаться -1 (6 + 8-11-4), но моя функция не работает, я не знаю почему.