# 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
```

## Recommended: Please solve it on PRACTICE first, before moving on to the solution.

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++

 `// CPP program to count total number of ` `// non-leaf nodes in a binary tree ` `#include ` `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; ` `} `

## Java

 `// 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));  ` `} ` `}  `

## Python3

 `# 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 `

## C#

 `// 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 `

Output:

```2
```

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

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 :

4

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