Count Non-Leaf nodes in a Binary Tree

Given a Binary tree, count total number of non-leaf nodes in the tree

Examples:

Input :


Output :2
Explanation
In the above tree only two nodes 1 and 2 are non-leaf nodes

We recursively traverse the given tree. While traversing, we count non-leaf nodes in left and right subtrees and add 1 to the result.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to count total number of
// non-leaf nodes in a binary tree
#include <bits/stdc++.h>
using namespace std;
  
/* A binary tree node has data, pointer to 
  left child and a pointer to right child */
struct Node {
    int data;
    struct Node* left;
    struct Node* right;
};
  
/* Helper function that allocates a new node with the
given data and NULL left and right pointers. */
struct Node* newNode(int data)
{
    struct Node* node = new Node;
    node->data = data;
    node->left = node->right = NULL;
    return (node);
}
  
/* Computes the number of non-leaf nodes in a tree. */
int countNonleaf(struct Node* root)
{
    // Base cases.
    if (root == NULL || (root->left == NULL && 
                         root->right == NULL))
        return 0;
  
    // If root is Not NULL and its one of its
    // child is also not NULL
    return 1 + countNonleaf(root->left) + 
               countNonleaf(root->right);
}
  
/* Driver program to test size function*/
int main()
{
    struct Node* root = newNode(1);
    root->left = newNode(2);
    root->right = newNode(3);
    root->left->left = newNode(4);
    root->left->right = newNode(5);
    cout << countNonleaf(root);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to count total number of 
// non-leaf nodes in a binary tree 
class GfG { 
  
/* A binary tree node has data, pointer to 
left child and a pointer to right child */
static class Node { 
    int data; 
    Node left; 
    Node right; 
}
  
/* Helper function that allocates a new node with the 
given data and NULL left and right pointers. */
static Node newNode(int data) 
    Node node = new Node(); 
    node.data = data; 
    node.left = null;
    node.right = null
    return (node); 
  
/* Computes the number of non-leaf nodes in a tree. */
static int countNonleaf(Node root) 
    // Base cases. 
    if (root == null || (root.left == null && 
                        root.right == null)) 
        return 0
  
    // If root is Not NULL and its one of its 
    // child is also not NULL 
    return 1 + countNonleaf(root.left) + 
                countNonleaf(root.right); 
  
/* Driver program to test size function*/
public static void main(String[] args) 
    Node root = newNode(1); 
    root.left = newNode(2); 
    root.right = newNode(3); 
    root.left.left = newNode(4); 
    root.left.right = newNode(5); 
    System.out.println(countNonleaf(root)); 
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to count total number 
# of non-leaf nodes in a binary tree
  
# class that allocates a new node with the 
#given data and None left and right pointers. 
class newNode:
    def __init__(self,data):
        self.data = data 
        self.left = self.right = None
  
# Computes the number of non-leaf 
# nodes in a tree. 
def countNonleaf(root):
      
    # Base cases. 
    if (root == None or (root.left == None and 
                         root.right == None)): 
        return 0
  
    # If root is Not None and its one of  
    # its child is also not None 
    return (1 + countNonleaf(root.left) + 
                countNonleaf(root.right))
  
# Driver Code
if __name__ == '__main__':
  
    root = newNode(1
    root.left = newNode(2
    root.right = newNode(3
    root.left.left = newNode(4
    root.left.right = newNode(5
    print(countNonleaf(root))
  
# This code is contributed by PranchalK

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to count total number of 
// non-leaf nodes in a binary tree
using System;
  
class GfG 
  
    /* A binary tree node has data, pointer to 
    left child and a pointer to right child */
    class Node { 
        public int data; 
        public Node left; 
        public Node right; 
    }
  
    /* Helper function that allocates a new node with the 
    given data and NULL left and right pointers. */
    static Node newNode(int data) 
    
        Node node = new Node(); 
        node.data = data; 
        node.left = null;
        node.right = null
        return (node); 
    
  
    /* Computes the number of non-leaf nodes in a tree. */
    static int countNonleaf(Node root) 
    
        // Base cases. 
        if (root == null || (root.left == null && 
                            root.right == null)) 
            return 0; 
  
        // If root is Not NULL and its one of its 
        // child is also not NULL 
        return 1 + countNonleaf(root.left) + 
                    countNonleaf(root.right); 
    
  
    /* Driver code*/
    public static void Main(String[] args) 
    
        Node root = newNode(1); 
        root.left = newNode(2); 
        root.right = newNode(3); 
        root.left.left = newNode(4); 
        root.left.right = newNode(5); 
        Console.WriteLine(countNonleaf(root)); 
    }
}
  
// This code is contributed by PrinciRaj1992

chevron_right



Output:

2


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.





Article Tags :
Practice Tags :


3


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.