- 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:
- Print all paths from root to leaf nodes in a binary tree.
- Find root to leaf path,sum equals given number in a binary tree

The root to leaf paths in a binary tree are as follows:
S. No. | Root to leaf node | Sum of path |
---|---|---|
1 | A -> B -> D | 120 |
2 | A -> B -> E | 90 |
3 | A -> C -> F | 110 |
4 | A -> 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 yes, Update the maxSum and
- If no, lets move on (this not the maximum sum path)
- Check the sum of root to leaf path is greater than maxSum
- If we reach the leaf node
- 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)

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] |