# Minimum sum path between two leaves of a binary tree

Given a binary tree in which each node element contains a number. The task is to find the minimum possible sum from one leaf node to another.

If one side of root is empty, then function should return minus infinite.

**Examples:**

Input :4 / \ 5 -6 / \ / \ 2 -3 1 8Output :1 The minimum sum path between two leaf nodes is: -3 -> 5 -> 4 -> -6 -> 1Input :3 / \ 2 4 / \ -5 1Output :-2

**Approach:** The idea is to maintain two values in recursive calls:

- Minimum root to leaf path sum for the subtree rooted under current node.
- The minimum path sum between leaves.

For every visited node X, we find the minimum root to leaf sum in left and right sub trees of X. We add the two values with X’s data, and compare the sum with the current minimum path sum.

Below is the implementation of the above approach:

`// C++ program to find minimum path sum ` `// between two leaves of a binary tree ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// A binary tree node ` `struct` `Node { ` ` ` `int` `data; ` ` ` `struct` `Node* left; ` ` ` `struct` `Node* right; ` `}; ` ` ` `// Utility function to allocate memory ` `// for a new node ` `struct` `Node* newNode(` `int` `data) ` `{ ` ` ` `struct` `Node* node = ` `new` `(` `struct` `Node); ` ` ` `node->data = data; ` ` ` `node->left = node->right = NULL; ` ` ` ` ` `return` `(node); ` `} ` ` ` `// A utility function to find the minimum sum between ` `// any two leaves. This function calculates two values: ` `// 1. Minimum path sum between two leaves which is stored ` `// in result and, ` `// 2. The minimum root to leaf path sum which is returned. ` `// If one side of root is empty, then it returns INT_MIN ` `int` `minPathSumUtil(` `struct` `Node* root, ` `int` `& result) ` `{ ` ` ` `// Base cases ` ` ` `if` `(root == NULL) ` ` ` `return` `0; ` ` ` ` ` `if` `(root->left == NULL && root->right == NULL) ` ` ` `return` `root->data; ` ` ` ` ` `// Find minimum sum in left and right sub tree. Also ` ` ` `// find minimum root to leaf sums in left and right ` ` ` `// sub trees and store them in ls and rs ` ` ` `int` `ls = minPathSumUtil(root->left, result); ` ` ` `int` `rs = minPathSumUtil(root->right, result); ` ` ` ` ` `// If both left and right children exist ` ` ` `if` `(root->left && root->right) { ` ` ` `// Update result if needed ` ` ` `result = min(result, ls + rs + root->data); ` ` ` ` ` `// Return minimum possible value for root being ` ` ` `// on one side ` ` ` `return` `min(ls + root->data, rs + root->data); ` ` ` `} ` ` ` ` ` `// If any of the two children is empty, return ` ` ` `// root sum for root being on one side ` ` ` `if` `(root->left == NULL) ` ` ` `return` `rs + root->data; ` ` ` `else` ` ` `return` `ls + root->data; ` `} ` ` ` `// Function to return the minimum ` `// sum path between two leaves ` `int` `minPathSum(` `struct` `Node* root) ` `{ ` ` ` `int` `result = INT_MAX; ` ` ` `minPathSumUtil(root, result); ` ` ` `return` `result; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `struct` `Node* root = newNode(4); ` ` ` `root->left = newNode(5); ` ` ` `root->right = newNode(-6); ` ` ` `root->left->left = newNode(2); ` ` ` `root->left->right = newNode(-3); ` ` ` `root->right->left = newNode(1); ` ` ` `root->right->right = newNode(8); ` ` ` ` ` `cout << minPathSum(root); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

1

## Recommended Posts:

- Find the maximum path sum between two leaves of a binary tree
- Minimum and maximum node that lies in the path connecting two nodes in a Binary Tree
- Find sum of all right leaves in a given Binary Tree
- Print all nodes in a binary tree having K leaves
- Height of binary tree considering even level leaves only
- Find sum of all left leaves in a given Binary Tree
- Extract Leaves of a Binary Tree in a Doubly Linked List
- Tree with N nodes and K leaves such that distance between farthest leaves is minimized
- Minimum swap required to convert binary tree to binary search tree
- XOR of path between any two nodes in a Binary Tree
- Maximum Path Sum in a Binary Tree
- Longest Path with Same Values in a Binary Tree
- Print path between any two nodes in a Binary Tree
- Print path from root to a given node in a binary tree
- Sort the path from root to a given node in a Binary Tree

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.