Product of all leaf nodes of binary tree

Given a binary tree, find the product of all the leaf nodes.

Examples:

Input : 
        1
      /   \
     2     3
    / \   / \
   4   5 6   7
          \
           8
Output :
product = 4 * 5 * 8 * 7 = 1120

The idea is to traverse the tree in any fashion and check if the node is the leaf node or not. If the node is the leaf node, multiply node data to a variable prod used to store the products of leaf nodes.



Following is the implementation of above approach.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find product of
// all leaf nodes of binary tree
#include <bits/stdc++.h>
using namespace std;
  
// struct binary tree node
struct Node {
    int data;
    Node *left, *right;
};
  
// return new node
Node* newNode(int data)
{
    Node* temp = new Node();
    temp->data = data;
    temp->left = temp->right = NULL;
    return temp;
}
  
// utility function which calculates
// product of all leaf nodes
void leafProduct(Node* root, int& prod)
{
    if (!root)
        return;
  
    // product root data to prod if
    // root is a leaf node
    if (!root->left && !root->right)
        prod *= root->data;
  
    // propagate recursively in left
    // and right subtree
    leafProduct(root->left, prod);
    leafProduct(root->right, prod);
}
  
// Driver program
int main()
{
  
    // contruct binary tree
    Node* root = newNode(1);
    root->left = newNode(2);
    root->left->left = newNode(4);
    root->left->right = newNode(5);
    root->right = newNode(3);
    root->right->right = newNode(7);
    root->right->left = newNode(6);
    root->right->left->right = newNode(8);
  
    // variable to store product of leaf nodes
    int prod = 1;
    leafProduct(root, prod);
    cout << prod << endl;
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find product of 
// all leaf nodes of binary tree 
class GFG
{
      
// struct binary tree node 
static class Node 
    int data; 
    Node left, right; 
}; 
  
// return new node 
static Node newNode(int data) 
    Node temp = new Node(); 
    temp.data = data; 
    temp.left = temp.right = null
    return temp; 
  
// product
static int prod = 1;
  
// utility function which calculates 
// product of all leaf nodes 
static void leafProduct(Node root ) 
    if (root == null
        return
  
    // product root data to prod if 
    // root is a leaf node 
    if (root.left == null && root.right == null
        prod *= root.data; 
  
    // propagate recursively in left 
    // and right subtree 
    leafProduct(root.left); 
    leafProduct(root.right); 
  
// Driver program 
public static void main(String args[])
  
    // contruct binary tree 
    Node root = newNode(1); 
    root.left = newNode(2); 
    root.left.left = newNode(4); 
    root.left.right = newNode(5); 
    root.right = newNode(3); 
    root.right.right = newNode(7); 
    root.right.left = newNode(6); 
    root.right.left.right = newNode(8); 
  
    // variable to store product of leaf nodes 
    prod = 1
    leafProduct(root); 
    System.out.println(prod );
}
  
// This code is contributed by Arnab Kundu

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find product of 
// all leaf nodes of binary tree
using System;
  
class GFG
{
      
// struct binary tree node 
public class Node 
    public int data; 
    public Node left, right; 
}; 
  
// return new node 
static Node newNode(int data) 
    Node temp = new Node(); 
    temp.data = data; 
    temp.left = temp.right = null
    return temp; 
  
// product
static int prod = 1;
  
// utility function which calculates 
// product of all leaf nodes 
static void leafProduct(Node root ) 
    if (root == null
        return
  
    // product root data to prod if 
    // root is a leaf node 
    if (root.left == null && root.right == null
        prod *= root.data; 
  
    // propagate recursively in left 
    // and right subtree 
    leafProduct(root.left); 
    leafProduct(root.right); 
  
// Driver code 
public static void Main(String []args)
  
    // contruct binary tree 
    Node root = newNode(1); 
    root.left = newNode(2); 
    root.left.left = newNode(4); 
    root.left.right = newNode(5); 
    root.right = newNode(3); 
    root.right.right = newNode(7); 
    root.right.left = newNode(6); 
    root.right.left.right = newNode(8); 
  
    // variable to store product of leaf nodes 
    prod = 1; 
    leafProduct(root); 
    Console.WriteLine(prod );
}
}
  
// This code has been contributed by 29AjayKumar

chevron_right


Output:

1120

Time Complexity : O(n), where n is the total number of nodes in the tree.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : andrew1234, 29AjayKumar