Learn how to create an algorithm to check if binary tree has path sum.
Example
Given a binary tree and a number check if there is a path in a binary tree from root to leaf (leaf is a node with no children) such that adding their sum equals to that number. If yes then return true else return false.
Input: [5,4,8,11,null,13,4,7,2,null,null,null,1] 22 Output: true
You can see the path sum in this image.
Finding binary tree sum path with recursion
- We use a tracker to check if the sum was present in the tree. It will be false by default.
- Start from 0 and pass the current sum to the child node by calling the function recursively with left and right childs.
- In each call if the sum is equal to the number and the current node is a leaf node that is does not have any child then mark true in the tracker.
- At the end return the tracker value.
const hasPathSum = (root, sum) => { //Tracker const tracker = { 'b' : false}; //Traverse the tree //Start with 0 and keep adding to it traverse(root, 0, sum, tracker); return tracker['b']; }; const traverse = (root, sum, match, found) => { //If no root then return if(!root){ return; } //Add the value with current sum sum += root.val; //If sum is present and is leaf node then mark true if(sum === match && !root.left && !root.right){ found['b'] = true; } //Traverse the left and right child nodes traverse(root.left, sum, match, found); traverse(root.right, sum, match, found); }
Input: //Assume that this input array will be converted to tree. hasPathSum([5,4,8,11,null,13,4,7,2,null,null,null,1], 22) Output: true
Time complexity: O(n) where n is all the nodes in the tree.
Space complexity: O(n) where n is all the nodes in the tree (considering the call stack).