Find the node with maximum value in a Binary Search Tree

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.



filter_none

edit
close

play_arrow

link
brightness_4
code

#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;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 */
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

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
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

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

Output:
Maximum value in BST is 6



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 :