Longest consecutive sequence in Binary tree

Given a Binary Tree find the length of the longest path which comprises of nodes with consecutive values in increasing order. Every node is considered as a path of length 1.

Examples:

In below diagram binary tree with longest consecutive path(LCP) are shown :




We can solve above problem recursively. At each node we need information of its parent node, if current node has value one more than its parent node then it makes a consecutive path, at each node we will compare node’s value with its parent value and update the longest consecutive path accordingly.
For getting the value of parent node, we will pass the (node_value + 1) as an argument to the recursive method and compare the node value with this argument value, if satisfies, update the current length of consecutive path otherwise reinitialize current path length by 1.
Please see below code for better understanding :

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C/C++ program to find longest consecutive
// sequence in binary tree
#include <bits/stdc++.h>
using namespace std;
  
/* A binary tree node has data, pointer to left
   child and a pointer to right child */
struct Node
{
    int data;
    Node *left, *right;
};
  
// A utility function to create a node
Node* newNode(int data)
{
    Node* temp = new Node;
    temp->data = data;
    temp->left = temp->right = NULL;
    return temp;
}
  
// Utility method to return length of longest
// consecutive sequence of tree
void longestConsecutiveUtil(Node* root, int curLength,
                              int expected, int& res)
{
    if (root == NULL)
        return;
  
    // if root data has one more than its parent
    // then increase current length
    if (root->data == expected)
        curLength++;
    else
        curLength = 1;
  
    //  update the maximum by current length
    res = max(res, curLength);
  
    // recursively call left and right subtree with
    // expected value 1 more than root data
    longestConsecutiveUtil(root->left, curLength,
                           root->data + 1, res);
    longestConsecutiveUtil(root->right, curLength,
                           root->data + 1, res);
}
  
// method returns length of longest consecutive
// sequence rooted at node root
int longestConsecutive(Node* root)
{
    if (root == NULL)
        return 0;
  
    int res = 0;
  
    //  call utility method with current length 0
    longestConsecutiveUtil(root, 0, root->data, res);
  
    return res;
}
  
//  Driver code to test above methods
int main()
{
    Node* root = newNode(6);
    root->right = newNode(9);
    root->right->left = newNode(7);
    root->right->right = newNode(10);
    root->right->right->right = newNode(11);
  
    printf("%d\n", longestConsecutive(root));
    return 0;
}

chevron_right


Python3

# Python3 program to find longest consecutive
# sequence in binary tree

# A utility class to create a node
class newNode:
def __init__(self, data):
self.data = data
self.left = self.right = None

# Utility method to return length of
# longest consecutive sequence of tree
def longestConsecutiveUtil(root, curLength,
expected, res):
if (root == None):
return

# if root data has one more than its
# parent then increase current length
if (root.data == expected):
curLength += 1
else:
curLength = 1

# update the maximum by current length
res[0] = max(res[0], curLength)

# recursively call left and right subtree
# with expected value 1 more than root data
longestConsecutiveUtil(root.left, curLength,
root.data + 1, res)
longestConsecutiveUtil(root.right, curLength,
root.data + 1, res)

# method returns length of longest consecutive
# sequence rooted at node root
def longestConsecutive(root):
if (root == None):
return 0

res = [0]

# call utility method with current length 0
longestConsecutiveUtil(root, 0, root.data, res)

return res[0]

# Driver Code
if __name__ == ‘__main__’:

root = newNode(6)
root.right = newNode(9)
root.right.left = newNode(7)
root.right.right = newNode(10)
root.right.right.right = newNode(11)

print(longestConsecutive(root))

# This code is contributed by PranchalK


Output:

3

Also discussed on below link:
Maximum Consecutive Increasing Path Length in Binary Tree

This article is contributed by Utkarsh Trivedi. 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : PranchalK



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.