Find maximum sum, root to leaf path in binary tree (Java/ recursive/ example)

  • Given a binary tree, find maximum sum from root to leaf paths using recursive algorithm.
    • Traverse binary tree using preOrder depth first search (DFS) algorithm.
  • Binary tree is rooted at node A and containing four leaf nodes. (Refer Fig 1)
    • So, there exists four paths, from root to leaf nodes.
  • Find sum of all nodes in each path, from root to leaf nodes.
    • Print maximum sum path (among all root to leaf paths).
  • We have already discussed similar problem:
root leaf path binary tree
Fig 1: Root to leaf paths – Binary tree

The root to leaf paths in a binary tree are as follows:

S. No.Root to leaf node Sum of path
1A -> B -> D 120
2A -> B -> E 90
3A -> C -> F 110
4A -> C -> G 140

So, clearly the path A -> C -> G  has maximum sum of 140, which is expected output of our problem.

Algorithm: find maximum sum, root to leaf path in a binary tree

  • Declare maxSum variable for maximum sum from root to leaf path.
  • Array arr containing the root to leaf path, having maximum sum
  • Perform pre order traversal, Save current node value in arr
    • Calculate the sum from root to leaf for current traversal
    • Keep on performing the traversal till we encounter the leaf
      • If we reach the leaf node
        • Check the sum of root to leaf path is greater than maxSum
          • If yes, Update the maxSum and
            • Save the path in arr
        • If no, lets move on (this not the maximum sum path)
    • Perform the traversal for left & right subtree.
  • At the end of traversal, we will get:
    • maxSum  and arr containing max sum path (root to leaf node).
  • Time Complexity: O(n)
max sum binary tree
Fig 2: Root to leaf paths

Program – find maximum sum, root to leaf path in binary tree ( Java)

1.) MaxSumPathRoot2Leaf:

  • MaxSumPathRoot2Leaf class is responsible for printing maximum sum path, from root to leaf node.
  • Traverse the binary tree using recursive algorithm.
package org.learn.Question;

import java.util.Arrays;

public class MaxSumPathRoot2Leaf {
 private static int maxSum = 0;
 private static int[] arr;

 public static void maxSumPath(Node root, int[] path) {
  maxSum = Integer.MIN_VALUE;
  maxSumPathRoot2Leaf(root, path, 0, 0);
  System.out.println("Maximum Sum :" + maxSum);
  System.out.println("Root to Leaf Path: " + Arrays.toString(arr));
 }

 public static void maxSumPathRoot2Leaf(Node root, int[] path, int index, int sum) {
  if (null == root) {
   return;
  }
  path[index++] = root.data;
  sum += root.data;
  if (root.left == null && root.right == null) {
   if (sum > maxSum) {
    maxSum = sum;
    arr = Arrays.copyOf(path, index);
   }
   return;
  }
  maxSumPathRoot2Leaf(root.left, path, index, sum);
  maxSumPathRoot2Leaf(root.right, path, index, sum);
  return;
 }
}

2.) Node Class:

  • Node class is representing the nodes of binary tree.
package org.learn.Question;

public class Node {
 public int data;
 public Node left;
 public Node right;

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

 public Node() {
  this.left = null;
  this.right = null;
 }
 
 public static Node createNode(int number) {
  return new Node(number);
 }
}

3.) App Class:

  • We are constructing the binary tree in a main method.
  • We are calling method of MaxSumPathRoot2Leaf class, to print max sum path from root to leaf node.
package org.learn.Client;

import org.learn.Question.MaxSumPathRoot2Leaf;
import org.learn.Question.Node;

public class App {
 public static void main(String[] args) {
  Node root = Node.createNode(50);
  root.left = Node.createNode(30);
  root.right = Node.createNode(30);
  // left sub tree
  root.left.left = Node.createNode(40);
  root.left.right = Node.createNode(10);

  // right subtree
  root.right.left = Node.createNode(30);
  root.right.right = Node.createNode(60);

  int[] path = new int[512];
  MaxSumPathRoot2Leaf.maxSumPath(root, path);
 }
}

Output – maximum sum, root to leaf path in a binary tree (java)

Maximum Sum :140
Root to Leaf Path: [50, 30, 60]

Download code-maximum sum, root to leaf path(binary tree)

Scroll to Top