функция, которая считает количество нечетных положительных элементов в двоичном дереве - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть домашнее задание, и я не могу понять, как считать нечетные числа с помощью рекурсии в двоичном дереве

Я пытался использовать для утверждения, но мой учитель сказал, что мне нужно делать с рекурсией, и это будет слишком ЭЗ, но я не могу ее получить.

 // create Tree 


    struct Node
     { 
        int key; 
         Node *left, *right; 
    }; 

    // Function to print all odd nodes 

    void oddNode(Node* root) 
    { 
        if (root != NULL) { 
            oddNode(root->left); 

            // if node is odd then print it 
            if (root->key % 2 != 0) 
                printf("%d ", root->key); 

            oddNode(root->right); 
        } 
    } 
     // Driver Code 

    int main() 

    { 

        /* Let us create following BST 

         5
        / \ 
        3 7 
        / \ / \ 
        2 4 6 8 */
        Node* root = NULL; 
        root = insert(root, 5); 
        root = insert(root, 3); 
        root = insert(root, 2); 
        root = insert(root, 4); 
        root = insert(root, 7); 
        root = insert(root, 6); 
        root = insert(root, 8);

    oddNode(root); 

} 

Вывод должен быть 3, но фактический вывод пуст

1 Ответ

0 голосов
/ 27 апреля 2019

Правильное решение:

int oddNode(Node* root) 
{
  int count = 0;
  if (root) {
    count += oddNode(root->left);
    if (root->key % 2 != 0 && root->key>0) {
      printf("%d ", root->key);
      ++count;
    }
    count += oddNode(root->right);
  }
  return count;
} 

// Driver Code 

int main() 
{ 
  /* Let us create following BST 
         5
        / \ 
        3 7 
        / \ / \ 
        2 4 6 8 */
  Node node8 = { 8, nullptr, nullptr };
  Node node6 = { 6, nullptr, nullptr };
  Node node4 = { 4, nullptr, nullptr };
  Node node2 = { 2, nullptr, nullptr };
  Node node7 = { 7, &node6, &node8 };
  Node node3 = { 3, &node2, &node4 };
  Node node5 = { 5, &node3, &node7 };
  Node *root = &node5;
  int count = oddNode(root);
  std::cout
    << "\n"
    << "Number of odd nodes: " << count << '\n'; 
} 
...