Given a Binary Search Tree, the task is to find the node with the maximum value in a BST.
For the above tree, we start with 20, then we move right 22, we keep on moving to right until we see NULL. Since right of 22 is NULL, 22 is the node with maximum value.
Approach: This is quite simple. Just traverse the node from root to right recursively until right is NULL. The node whose right is NULL is the node with maximum value.
C++
#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; }; // Function to create a new node struct node* newNode( int data) { struct node* node = ( struct node*) malloc ( sizeof ( struct node)); node->data = data; node->left = NULL; node->right = NULL; return (node); } // 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 |
Maximum value in BST is 6
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.