Skip to content
Related Articles

Related Articles

Calculate depth of a full Binary tree from Preorder

View Discussion
Improve Article
Save Article
Like Article
  • Difficulty Level : Medium
  • Last Updated : 06 Jul, 2022

Given preorder of a binary tree, calculate its depth(or height) [starting from depth 0]. The preorder is given as a string with two possible characters. 

  1. ‘l’ denotes the leaf
  2. ‘n’ denotes internal node

The given tree can be seen as a full binary tree where every node has 0 or two children. The two children of a node can ‘n’ or ‘l’ or mix of both.

Examples :  

Input  : nlnll
Output : 2
Explanation :

Input  : nlnnlll
Output : 3

Preorder of the binary tree is given so traverse 

Also, we would be given a string of char (formed of ‘n’ and ‘l’), so there is no need to implement tree also.

The recursion function would be: 

  1. Base Case: return 0; when tree[i] = ‘l’ or i >= strlen(tree) 
  2. find_depth( tree[i++] ) //left subtree 
  3. find_depth( tree[i++] ) //right subtree

Where i is the index of the string tree. 

Implementation:

C++




// C++ program to find height of full binary tree
// using preorder
#include <bits/stdc++.h>
using namespace std;
 
// function to return max of left subtree height
// or right subtree height
int findDepthRec(char tree[], int n, int& index)
{
    if (index >= n || tree[index] == 'l')
        return 0;
 
    // calc height of left subtree (In preorder
    // left subtree is processed before right)
    index++;
    int left = findDepthRec(tree, n, index);
 
    // calc height of right subtree
    index++;
    int right = findDepthRec(tree, n, index);
 
    return max(left, right) + 1;
}
 
// Wrapper over findDepthRec()
int findDepth(char tree[], int n)
{
    int index = 0;
    return findDepthRec(tree, n, index);
}
 
// Driver program
int main()
{
    // Your C++ Code
    char tree[] = "nlnnlll";
    int n = strlen(tree);
 
    cout << findDepth(tree, n) << endl;
 
    return 0;
}


Java




// Java program to find height
// of full binary tree using
// preorder
import java .io.*;
 
class GFG
{
    // function to return max
    // of left subtree height
    // or right subtree height
    static int findDepthRec(String tree,
                            int n, int index)
    {
        if (index >= n ||
            tree.charAt(index) == 'l')
            return 0;
 
        // calc height of left subtree
        // (In preorder left subtree
        // is processed before right)
        index++;
        int left = findDepthRec(tree,
                                n, index);
 
        // calc height of
        // right subtree
        index++;
        int right = findDepthRec(tree, n, index);
 
        return Math.max(left, right) + 1;
    }
 
    // Wrapper over findDepthRec()
    static int findDepth(String tree,
                         int n)
    {
        int index = 0;
        return (findDepthRec(tree,
                             n, index));
    }
 
    // Driver Code
    static public void main(String[] args)
    {
        String tree = "nlnnlll";
        int n = tree.length();
        System.out.println(findDepth(tree, n));
    }
}
 
// This code is contributed
// by anuj_67.


Python3




#Python program to find height of full binary tree
# using preorder
     
# function to return max of left subtree height
# or right subtree height
def findDepthRec(tree, n, index) :
 
    if (index[0] >= n or tree[index[0]] == 'l'):
        return 0
 
    # calc height of left subtree (In preorder
    # left subtree is processed before right)
    index[0] += 1
    left = findDepthRec(tree, n, index)
 
    # calc height of right subtree
    index[0] += 1
    right = findDepthRec(tree, n, index)
    return (max(left, right) + 1)
 
# Wrapper over findDepthRec()
def findDepth(tree, n) :
 
    index = [0]
    return findDepthRec(tree, n, index)
 
         
# Driver program to test above functions
if __name__ == '__main__':
    tree= "nlnnlll"
    n = len(tree)
 
    print(findDepth(tree, n))
 
# This code is contributed by SHUBHAMSINGH10


C#




// C# program to find height of
// full binary tree using preorder
using System;
 
class GFG {
 
    // function to return max of left subtree
    // height or right subtree height
    static int findDepthRec(char[] tree, int n, int index)
    {
        if (index >= n || tree[index] == 'l')
            return 0;
 
        // calc height of left subtree (In preorder
        // left subtree is processed before right)
        index++;
        int left = findDepthRec(tree, n, index);
 
        // calc height of right subtree
        index++;
        int right = findDepthRec(tree, n, index);
 
        return Math.Max(left, right) + 1;
    }
 
    // Wrapper over findDepthRec()
    static int findDepth(char[] tree, int n)
    {
        int index = 0;
        return (findDepthRec(tree, n, index));
    }
 
    // Driver program
    static public void Main()
    {
        char[] tree = "nlnnlll".ToCharArray();
        int n = tree.Length;
        Console.WriteLine(findDepth(tree, n));
    }
}
 
// This code is contributed by vt_m.


Javascript




<script>
    // Javascript program to find height of
    // full binary tree using preorder
     
    // function to return max of left subtree
    // height or right subtree height
    function findDepthRec(tree, n, index)
    {
        if (index >= n || tree[index] == 'l')
            return 0;
  
        // calc height of left subtree (In preorder
        // left subtree is processed before right)
        index++;
        let left = findDepthRec(tree, n, index);
  
        // calc height of right subtree
        index++;
        let right = findDepthRec(tree, n, index);
  
        return Math.max(left, right) + 1;
    }
  
    // Wrapper over findDepthRec()
    function findDepth(tree, n)
    {
        let index = 0;
        return (findDepthRec(tree, n, index));
    }
     
    let tree = "nlnnlll".split('');
    let n = tree.length;
    document.write(findDepth(tree, n));
     
</script>


Output

3

Time Complexity: O(N)
Auxiliary Space: O(1)

This article is contributed by Shubham Gupta. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!