# Find the node with maximum value in a Binary Search Tree

• Difficulty Level : Easy
• Last Updated : 12 Sep, 2021

Given a Binary Search Tree, the task is to find the node with the maximum value in a BST. Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

For the above tree, we start with 20, then we move right to 22. We keep on moving to the right until we see NULL. Since the right of 22 is NULL, 22 is the node with the maximum value.

Approach: This is quite simple. Just traverse the node from root to right recursively until the right is NULL. The node whose right is NULL is the node with the maximum value.

## C++

 `#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;``};`` ` `// Function to create a new node``struct` `node* newNode(``int` `data)``{``    ``struct` `node* newnode = ``new` `node();``    ``newnode->data = data;``    ``newnode->left = NULL;``    ``newnode->right = NULL;`` ` `    ``return` `(newnode);``}`` ` `// Function to insert a new node in BST``struct` `node* insert(``struct` `node* node, ``int` `data)``{``    ``/* 1. If the tree is empty, return a new,      ``      ``single node */``    ``if` `(node == NULL)``        ``return` `(newNode(data));``    ``else` `{``        ``/* 2. Otherwise, recur down the tree */``        ``if` `(data <= node->data)``            ``node->left = insert(node->left, data);``        ``else``            ``node->right = insert(node->right, data);`` ` `        ``/* return the (unchanged) node pointer */``        ``return` `node;``    ``}``}`` ` `// Function to find the node with maximum value``// i.e. rightmost leaf node``int` `maxValue(``struct` `node* node)``{   ``    ``/* loop down to find the rightmost leaf */``    ``struct` `node* current = node;``    ``while` `(current->right != NULL) ``        ``current = current->right;``     ` `    ``return` `(current->data);``}`` ` `// Driver code``int` `main()``{``    ``struct` `node* root = NULL;``    ``root = insert(root, 4);``    ``insert(root, 2);``    ``insert(root, 1);``    ``insert(root, 3);``    ``insert(root, 6);``    ``insert(root, 5);`` ` `    ``cout << ``"Maximum value in BST is "` `<< maxValue(root);`` ` `    ``return` `0;``}`

## Java

 `// Java implementation to find the sum of last``// 'n' nodes of the Linked List``import` `java.util.*;`` ` `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;``};`` ` `// Function to create a new node``static` `node newNode(``int` `data)``{``    ``node node = ``new` `node();``    ``node.data = data;``    ``node.left = ``null``;``    ``node.right = ``null``;`` ` `    ``return` `(node);``}`` ` `// Function to insert a new node in BST``static` `node insert(node node, ``int` `data)``{``    ``/* 1. If the tree is empty, return a new,     ``    ``single node */``    ``if` `(node == ``null``)``        ``return` `(newNode(data));``    ``else` `    ``{``        ``/* 2. Otherwise, recur down the tree */``        ``if` `(data <= node.data)``            ``node.left = insert(node.left, data);``        ``else``            ``node.right = insert(node.right, data);`` ` `        ``/* return the (unchanged) node pointer */``        ``return` `node;``    ``}``}`` ` `// Function to find the node with maximum value``// i.e. rightmost leaf node``static` `int` `maxValue(node node)``{ ``    ``/* loop down to find the rightmost leaf */``    ``node current = node;``    ``while` `(current.right != ``null``) ``        ``current = current.right;``     ` `    ``return` `(current.data);``}`` ` `// Driver code``public` `static` `void` `main(String[] args) ``{``    ``node root = ``null``;``    ``root = insert(root, ``4``);``    ``insert(root, ``2``);``    ``insert(root, ``1``);``    ``insert(root, ``3``);``    ``insert(root, ``6``);``    ``insert(root, ``5``);`` ` `    ``System.out.println(``"Maximum value in BST is "` `+ maxValue(root));``}``}`` ` `/* This code is contributed by PrinciRaj1992 */`

## Python3

 `import` `sys``import` `math`` ` `# A binary tree node has data, pointer to left child ``# and a pointer to right child ``class` `Node:``    ``def` `__init__(``self``,data):``        ``self``.data ``=` `data``        ``self``.left ``=` `None``        ``self``.right ``=` `None`` ` `# Function to insert a new node in BST``def` `insert(root, data):`` ` `    ``# 1. If the tree is empty, return a new,     ``    ``# single node``    ``if` `not` `root:``        ``return` `Node(data)`` ` `    ``# 2. Otherwise, recur down the tree``    ``if` `data < root.data:``        ``root.left ``=` `insert(root.left, data)``    ``if` `data > root.data:``        ``root.right ``=` `insert(root.right, data)``     ` `    ``# return the (unchanged) node pointer``    ``return` `root`` ` `# Function to find the node with maximum value ``# i.e. rightmost leaf node ``def` `maxValue(root):``    ``current ``=` `root``     ` `    ``#loop down to find the rightmost leaf``    ``while``(current.right):``        ``current ``=` `current.right``    ``return` `current.data`` ` `# Driver code ``if` `__name__``=``=``'__main__'``:``    ``root``=``None``    ``root ``=` `insert(root,``2``)``    ``root ``=` `insert(root,``1``)``    ``root ``=` `insert(root,``3``)``    ``root ``=` `insert(root,``6``)``    ``root ``=` `insert(root,``5``)``    ``print``(``"Maximum value in BST is {}"``.``format``(maxValue(root)))`` ` `# This code is contributed by Vikash Kumar 37`

## C#

 `// C# implementation to find the sum of last ``// 'n' nodes of the Linked List ``using` `System;`` ` `class` `GFG ``{ `` ` ` ` `/* A binary tree node has data, pointer to left child ``and a pointer to right child */``public` `class` `node ``{ ``    ``public` `int` `data; ``    ``public` `node left; ``    ``public` `node right; ``}; `` ` `// Function to create a new node ``static` `node newNode(``int` `data) ``{ ``    ``node node = ``new` `node(); ``    ``node.data = data; ``    ``node.left = ``null``; ``    ``node.right = ``null``; `` ` `    ``return` `(node); ``} `` ` `// Function to insert a new node in BST ``static` `node insert(node node, ``int` `data) ``{ ``    ``/* 1. If the tree is empty, return a new, ``    ``single node */``    ``if` `(node == ``null``) ``        ``return` `(newNode(data)); ``    ``else``    ``{ ``        ``/* 2. Otherwise, recur down the tree */``        ``if` `(data <= node.data) ``            ``node.left = insert(node.left, data); ``        ``else``            ``node.right = insert(node.right, data); `` ` `        ``/* return the (unchanged) node pointer */``        ``return` `node; ``    ``} ``} `` ` `// Function to find the node with maximum value ``// i.e. rightmost leaf node ``static` `int` `maxValue(node node) ``{ ``    ``/* loop down to find the rightmost leaf */``    ``node current = node; ``    ``while` `(current.right != ``null``) ``        ``current = current.right; ``     ` `    ``return` `(current.data); ``} `` ` `// Driver code ``public` `static` `void` `Main(String[] args) ``{ ``    ``node root = ``null``; ``    ``root = insert(root, 4); ``    ``insert(root, 2); ``    ``insert(root, 1); ``    ``insert(root, 3); ``    ``insert(root, 6); ``    ``insert(root, 5); `` ` `    ``Console.WriteLine(``"Maximum value in BST is "` `+ maxValue(root)); ``} ``} `` ` `// This code is contributed by Rajput-Ji`

## Javascript

 ``
Output:
`Maximum value in BST is 6`

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

My Personal Notes arrow_drop_up