一个计算二叉树中奇数正元素个数的函数

时间:2019-04-27 08:17:19

标签: c++ count tree binary

我有作业,而且我不明白如何在二叉树中递归计算奇数

我尝试使用for语句,但是我的老师说我需要进行递归操作,这很容易做到,但是我无法实现。

 // 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 :(得分:0)

正确的解决方案:

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'; 
}