Find maximum (or minimum) in Binary Tree (original) (raw)

Last Updated : 23 Jul, 2025

Given a Binary Tree, find the maximum(or minimum) element in it. For example, maximum in the following Binary Tree is 9.

1T

In Binary Search Tree, we can find maximum by traversing right pointers until we reach the rightmost node. But in Binary Tree, we must visit every node to figure out maximum. So the idea is to traverse the given tree and for every node return maximum of 3 values.

  1. Node's data.
  2. Maximum in node's left subtree.
  3. Maximum in node's right subtree.

Below is the implementation of above approach.

Try It Yourselfredirect icon

C++ `

// C++ program to find maximum and // minimum in a Binary Tree #include <bits/stdc++.h> #include using namespace std;

// A tree node class Node { public: int data; Node *left, *right;

/* Constructor that allocates a new
node with the given data and NULL
left and right pointers. */
Node(int data)
{
    this->data = data;
    this->left = NULL;
    this->right = NULL;
}

};

// Returns maximum value in a given // Binary Tree int findMax(Node* root) { // Base case if (root == NULL) return INT_MIN;

// Return maximum of 3 values:
// 1) Root's data 2) Max in Left Subtree
// 3) Max in right subtree
int res = root->data;
int lres = findMax(root->left);
int rres = findMax(root->right);
if (lres > res)
    res = lres;
if (rres > res)
    res = rres;
return res;

}

// Driver Code int main() { Node* NewRoot = NULL; Node* root = new Node(2); root->left = new Node(7); root->right = new Node(5); root->left->right = new Node(6); root->left->right->left = new Node(1); root->left->right->right = new Node(11); root->right->right = new Node(9); root->right->right->left = new Node(4);

// Function call
cout << "Maximum element is " << findMax(root) << endl;

return 0;

}

// This code is contributed by // rathbhupendra

C

// C program to find maximum and minimum in a Binary Tree #include <limits.h> #include <stdio.h> #include <stdlib.h>

// A tree node struct Node { int data; struct Node *left, *right; };

// A utility 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 = node->right = NULL; return (node); }

// Returns maximum value in a given Binary Tree int findMax(struct Node* root) { // Base case if (root == NULL) return INT_MIN;

// Return maximum of 3 values:
// 1) Root's data 2) Max in Left Subtree
// 3) Max in right subtree
int res = root->data;
int lres = findMax(root->left);
int rres = findMax(root->right);
if (lres > res)
    res = lres;
if (rres > res)
    res = rres;
return res;

}

// Driver code int main(void) { struct Node* NewRoot = NULL; struct Node* root = newNode(2); root->left = newNode(7); root->right = newNode(5); root->left->right = newNode(6); root->left->right->left = newNode(1); root->left->right->right = newNode(11); root->right->right = newNode(9); root->right->right->left = newNode(4);

// Function call
printf("Maximum element is %d \n", findMax(root));

return 0;

}

Java

// Java code to Find maximum (or minimum) in // Binary Tree

// A binary tree node class Node { int data; Node left, right;

public Node(int data)
{
    this.data = data;
    left = right = null;
}

}

class BinaryTree { Node root;

// Returns the max value in a binary tree
static int findMax(Node node)
{
    if (node == null)
        return Integer.MIN_VALUE;

    int res = node.data;
    int lres = findMax(node.left);
    int rres = findMax(node.right);

    if (lres > res)
        res = lres;
    if (rres > res)
        res = rres;
    return res;
}

/* Driver code */
public static void main(String args[])
{
    BinaryTree tree = new BinaryTree();
    tree.root = new Node(2);
    tree.root.left = new Node(7);
    tree.root.right = new Node(5);
    tree.root.left.right = new Node(6);
    tree.root.left.right.left = new Node(1);
    tree.root.left.right.right = new Node(11);
    tree.root.right.right = new Node(9);
    tree.root.right.right.left = new Node(4);

    // Function call
    System.out.println("Maximum element is "
                       + tree.findMax(tree.root));
}

}

// This code is contributed by Kamal Rawal

Python3

Python3 program to find maximum

and minimum in a Binary Tree

A class to create a new node

class newNode: def init(self, data): self.data = data self.left = self.right = None

Returns maximum value in a

given Binary Tree

def findMax(root):

# Base case
if (root == None):
    return float('-inf')

# Return maximum of 3 values:
# 1) Root's data 2) Max in Left Subtree
# 3) Max in right subtree
res = root.data
lres = findMax(root.left)
rres = findMax(root.right)
if (lres > res):
    res = lres
if (rres > res):
    res = rres
return res

Driver Code

if name == 'main': root = newNode(2) root.left = newNode(7) root.right = newNode(5) root.left.right = newNode(6) root.left.right.left = newNode(1) root.left.right.right = newNode(11) root.right.right = newNode(9) root.right.right.left = newNode(4)

# Function call
print("Maximum element is",
      findMax(root))

This code is contributed by PranchalK

C#

// C# code to Find maximum (or minimum) in // Binary Tree using System;

// A binary tree node public class Node { public int data; public Node left, right;

public Node(int data)
{
    this.data = data;
    left = right = null;
}

}

public class BinaryTree { public Node root;

// Returns the max value in a binary tree
public static int findMax(Node node)
{
    if (node == null) {
        return int.MinValue;
    }

    int res = node.data;
    int lres = findMax(node.left);
    int rres = findMax(node.right);

    if (lres > res) {
        res = lres;
    }
    if (rres > res) {
        res = rres;
    }
    return res;
}

/* Driver code */
public static void Main(string[] args)
{
    BinaryTree tree = new BinaryTree();
    tree.root = new Node(2);
    tree.root.left = new Node(7);
    tree.root.right = new Node(5);
    tree.root.left.right = new Node(6);
    tree.root.left.right.left = new Node(1);
    tree.root.left.right.right = new Node(11);
    tree.root.right.right = new Node(9);
    tree.root.right.right.left = new Node(4);

    // Function call
    Console.WriteLine("Maximum element is "
                      + BinaryTree.findMax(tree.root));
}

}

// This code is contributed by Shrikant13

JavaScript

`

Output

Maximum element is 11

Time Complexity: O(N), where N is number of nodes as every node of tree is traversed once by findMax() and findMin().
Auxiliary Space: O(N) , Recursive call for each node tree considered as stack space.

Similarly, we can find the minimum element in a Binary tree by comparing three values. Below is the function to find a minimum in Binary Tree.

C++ `

int findMin(Node *root) { //code if(root==NULL) { return INT_MAX; } int res=root->data; int left=findMin(root->left); int right=findMin(root->right); if(left<res) { res=left; } if(right<res) { res=right; } return res; }

C

// Returns minimum value in a given Binary Tree int findMin(struct Node* root) { // Base case if (root == NULL) return INT_MAX;

// Return minimum of 3 values:
// 1) Root's data 2) Max in Left Subtree
// 3) Max in right subtree
int res = root->data;
int lres = findMin(root->left);
int rres = findMin(root->right);
if (lres < res)
  res = lres;
if (rres < res)
  res = rres;
return res;

}

Java

// Returns the min value in a binary tree static int findMin(Node node) { if (node == null) return Integer.MAX_VALUE;

int res = node.data;
int lres = findMin(node.left);
int rres = findMin(node.right);

if (lres < res)
    res = lres;
if (rres < res)
    res = rres;
return res;

}

Python3

Returns the min value in a binary tree

def find_min_in_BT(root): if root is None: return float('inf') res = root.data lres = find_min_in_BT(root.leftChild) rres = find_min_in_BT(root.rightChild) if lres < res: res = lres if rres < res: res = rres return res

This code is contributed by Subhajit Nandi

C#

// Returns the min value in a binary tree public static int findMin(Node node) { if (node == null) return int.MaxValue;

int res = node.data;
int lres = findMin(node.left);
int rres = findMin(node.right);

if (lres < res)
    res = lres;
if (rres < res)
    res = rres;
return res;

}

// This code is contributed by Code_Mech

JavaScript

`

Complexity Analysis:

Time Complexity: O(N).
In the recursive function calls, every node of the tree is processed once and hence the complexity due to the function is O(N) if there are total N nodes in the tree. Therefore, the time complexity is O(N).

Space Complexity: O(N).
Recursive call is happening. The every node is processed once and considering the stack space, the space complexity will be O(N).