# Count of nodes in a binary tree having their nodes in range [L, R]

Given a Binary Tree consisting of **N** nodes and two positive integers L and R, the task is to find the count of nodes having their value in the range **[L, R]**.

**Examples:**

Input:Tree in the image below, L = 4, R = 15

Output:2Explanation:The nodes in the given Tree that lies in the range [4, 15] are {5, 10}.

Input:Tree in the image below, L = 8, R = 20

Output:4

**Approach:** The given problem can be solved by performing any Tree Traversal and maintaining the count of nodes having their values in the range **[L, R]**. This article uses a DFS traversal.

Below is the implementation of the above approach:

## C++

`// C++ program for the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Class for node of the Tree` `class` `Node {` `public` `:` ` ` `int` `val;` ` ` `Node *left, *right;` `};` `// Function to create a new Binary node` `Node* newNode(` `int` `item)` `{` ` ` `Node* temp = ` `new` `Node();` ` ` `temp->val = item;` ` ` `temp->left = temp->right = NULL;` ` ` `// Return the newly created node` ` ` `return` `temp;` `}` `// Function to find the count of` `// nodes in the given tree with` `// their value in the range [1, N]` `int` `countRange(Node* root, ` `int` `low,` ` ` `int` `high, ` `int` `count)` `{` ` ` `int` `val = 0;` ` ` `// If root exists` ` ` `if` `(root != NULL) {` ` ` `val += root->val >= low` ` ` `&& root->val <= high` ` ` `? 1` ` ` `: 0;` ` ` `}` ` ` `// Otherwise return` ` ` `else` `{` ` ` `return` `0;` ` ` `}` ` ` `// Add count of current node,` ` ` `// count in left subtree, and` ` ` `// count in the right subtree` ` ` `count = val` ` ` `+ countRange(root->left,` ` ` `low, high, count)` ` ` `+ countRange(root->right,` ` ` `low, high, count);` ` ` `// Return Answer` ` ` `return` `count;` `}` `// Driver Code` `int` `main()` `{` ` ` `Node* root = NULL;` ` ` `root = newNode(20);` ` ` `root->left = newNode(2);` ` ` `root->right = newNode(10);` ` ` `root->right->left = newNode(2);` ` ` `root->right->right = newNode(5);` ` ` `int` `L = 4, R = 15;` ` ` `cout << countRange(root, L, R, 0);` ` ` `return` `0;` `}` |

## Java

`// Java program for the above approach` `import` `java.util.*;` `class` `GFG{` ` ` `// Class for node of the Tree` ` ` `static` `class` `Node {` ` ` `int` `val;` ` ` `Node left, right;` ` ` `};` ` ` `// Function to create a new Binary node` ` ` `static` `Node newNode(` `int` `item)` ` ` `{` ` ` `Node temp = ` `new` `Node();` ` ` `temp.val = item;` ` ` `temp.left = temp.right = ` `null` `;` ` ` `// Return the newly created node` ` ` `return` `temp;` ` ` `}` ` ` `// Function to find the count of` ` ` `// nodes in the given tree with` ` ` `// their value in the range [1, N]` ` ` `static` `int` `countRange(Node root, ` `int` `low,` ` ` `int` `high, ` `int` `count)` ` ` `{` ` ` `int` `val = ` `0` `;` ` ` `// If root exists` ` ` `if` `(root != ` `null` `) {` ` ` `val += root.val >= low` ` ` `&& root.val <= high` ` ` `? ` `1` ` ` `: ` `0` `;` ` ` `}` ` ` `// Otherwise return` ` ` `else` `{` ` ` `return` `0` `;` ` ` `}` ` ` `// Add count of current node,` ` ` `// count in left subtree, and` ` ` `// count in the right subtree` ` ` `count = val` ` ` `+ countRange(root.left,` ` ` `low, high, count)` ` ` `+ countRange(root.right,` ` ` `low, high, count);` ` ` `// Return Answer` ` ` `return` `count;` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `main(String[] args)` ` ` `{` ` ` `Node root = ` `null` `;` ` ` `root = newNode(` `20` `);` ` ` `root.left = newNode(` `2` `);` ` ` `root.right = newNode(` `10` `);` ` ` `root.right.left = newNode(` `2` `);` ` ` `root.right.right = newNode(` `5` `);` ` ` `int` `L = ` `4` `, R = ` `15` `;` ` ` `System.out.print(countRange(root, L, R, ` `0` `));` ` ` `}` `}` `// This code is contributed by shikhasingrajput` |

## Python3

`# Python program for the above approach` `# Class for Node of the Tree` `class` `Node:` ` ` `def` `__init__(` `self` `, val):` ` ` `self` `.val ` `=` `val;` ` ` `self` `.left ` `=` `None` `;` ` ` `self` `.right ` `=` `None` `;` `# Function to create a new Binary Node` `def` `newNode(item):` ` ` `temp ` `=` `Node(item);` ` ` ` ` `# Return the newly created Node` ` ` `return` `temp;` `# Function to find the count of` `# Nodes in the given tree with` `# their value in the range [1, N]` `def` `countRange(root, low, high, count):` ` ` `val ` `=` `0` `;` ` ` `# If root exists` ` ` `if` `(root !` `=` `None` `):` ` ` `val ` `+` `=` `1` `if` `(root.val >` `=` `low ` `and` `root.val <` `=` `high) ` `else` `0` `;` ` ` `# Otherwise return` ` ` `else` `:` ` ` `return` `0` `;` ` ` `# Add count of current Node,` ` ` `# count in left subtree, and` ` ` `# count in the right subtree` ` ` `count ` `=` `val ` `+` `countRange(root.left, low, high, count) ` `+` `countRange(root.right, low, high, count);` ` ` `# Return Answer` ` ` `return` `count;` `# Driver Code` `if` `__name__ ` `=` `=` `'__main__'` `:` ` ` `root ` `=` `None` `;` ` ` `root ` `=` `newNode(` `20` `);` ` ` `root.left ` `=` `newNode(` `2` `);` ` ` `root.right ` `=` `newNode(` `10` `);` ` ` `root.right.left ` `=` `newNode(` `2` `);` ` ` `root.right.right ` `=` `newNode(` `5` `);` ` ` `L ` `=` `4` `;` ` ` `R ` `=` `15` `;` ` ` `print` `(countRange(root, L, R, ` `0` `));` `# This code is contributed by 29AjayKumar` |

## C#

`// C# program for the above approach` `using` `System;` `public` `class` `GFG{` ` ` `// Class for node of the Tree` ` ` `class` `Node {` ` ` `public` `int` `val;` ` ` `public` `Node left, right;` ` ` `};` ` ` `// Function to create a new Binary node` ` ` `static` `Node newNode(` `int` `item)` ` ` `{` ` ` `Node temp = ` `new` `Node();` ` ` `temp.val = item;` ` ` `temp.left = temp.right = ` `null` `;` ` ` `// Return the newly created node` ` ` `return` `temp;` ` ` `}` ` ` `// Function to find the count of` ` ` `// nodes in the given tree with` ` ` `// their value in the range [1, N]` ` ` `static` `int` `countRange(Node root, ` `int` `low,` ` ` `int` `high, ` `int` `count)` ` ` `{` ` ` `int` `val = 0;` ` ` `// If root exists` ` ` `if` `(root != ` `null` `) {` ` ` `val += root.val >= low` ` ` `&& root.val <= high` ` ` `? 1` ` ` `: 0;` ` ` `}` ` ` `// Otherwise return` ` ` `else` `{` ` ` `return` `0;` ` ` `}` ` ` `// Add count of current node,` ` ` `// count in left subtree, and` ` ` `// count in the right subtree` ` ` `count = val` ` ` `+ countRange(root.left,` ` ` `low, high, count)` ` ` `+ countRange(root.right,` ` ` `low, high, count);` ` ` `// Return Answer` ` ` `return` `count;` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `Main(String[] args)` ` ` `{` ` ` `Node root = ` `null` `;` ` ` `root = newNode(20);` ` ` `root.left = newNode(2);` ` ` `root.right = newNode(10);` ` ` `root.right.left = newNode(2);` ` ` `root.right.right = newNode(5);` ` ` `int` `L = 4, R = 15;` ` ` `Console.Write(countRange(root, L, R, 0));` ` ` `}` `}` `// This code is contributed by shikhasingrajput` |

## Javascript

`<script>` ` ` `// JavaScript code for the above approach` ` ` `// Class for node of the Tree` ` ` `class Node {` ` ` `constructor(val1) {` ` ` `this` `.val = val1;` ` ` `this` `.left = ` `null` `;` ` ` `this` `.right = ` `null` `;` ` ` `}` ` ` `};` ` ` `// Function to find the count of` ` ` `// nodes in the given tree with` ` ` `// their value in the range [1, N]` ` ` `function` `countRange(root, low,` ` ` `high, count) {` ` ` `let val = 0;` ` ` `// If root exists` ` ` `if` `(root != ` `null` `) {` ` ` `val += root.val >= low` ` ` `&& root.val <= high` ` ` `? 1` ` ` `: 0;` ` ` `}` ` ` `// Otherwise return` ` ` `else` `{` ` ` `return` `0;` ` ` `}` ` ` `// Add count of current node,` ` ` `// count in left subtree, and` ` ` `// count in the right subtree` ` ` `count = val` ` ` `+ countRange(root.left,` ` ` `low, high, count)` ` ` `+ countRange(root.right,` ` ` `low, high, count);` ` ` `// Return Answer` ` ` `return` `count;` ` ` `}` ` ` `// Driver Code` ` ` `let root = ` `null` `;` ` ` `root = ` `new` `Node(20);` ` ` `root.left = ` `new` `Node(2);` ` ` `root.right = ` `new` `Node(10);` ` ` `root.right.left = ` `new` `Node(2);` ` ` `root.right.right = ` `new` `Node(5);` ` ` `let L = 4, R = 15;` ` ` `document.write(countRange(root, L, R, 0));` `// This code is contributed by Potta Lokesh` ` ` `</script>` |

**Output**

2

**Time Complexity: **O(N) **Auxiliary Space:** O(1)