Open In App

Print Levels of all nodes in a Binary Tree

Given a Binary Tree and a key, write a function that prints levels of all keys in given binary tree.

For example, consider the following tree. If the input key is 3, then your function should return 1. If the input key is 4, then your function should return 3. And for key which is not present in key, then your function should return 0.



Input:
       3
      / \
     2   5
    / \
   1   4

output:
 Level of 1 is 3
 Level of 2 is 2
 Level of 3 is 1
 Level of 4 is 3
 Level of 5 is 2

We have discussed an recursive solution in below post. 
Get Level of a node in a Binary Tree



In this post, an iterative solution based on Level order traversal is discussed. We store level of every node in queue together with the node while doing the traversal. 

Algorithm:

Step 1: Start 
Step 2: Create a class of static type name it as pair which have two parameter one of node type an danother is of integer type.
Step 3: create a function of static type with null return type nameas “printLevel” which take raaotof linked list as input.
            a. Set base condition as if ( root == null ) return
            b. Create a queue to hold the tree nodes and their levels name it as “q”.
            c. add root node at level 1 in q
            d. Define a pair variable p.
            e. start a while loop to do level-order traversal until queue is empty:
               1. Dequeue a node and its level into the pair variable p at the front of the queue.
               2. Print the data and the node’s level
               3. Enqueue the node’s left child with its level increased by 1 if it has one.
               4. Enqueue the node’s right child with its level increased by 1 if it has one.

step 4: End

Implementation:












<div id="highlighter_959175" class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments"># Python3 program to print levels</code></div><div class="line number2 index1 alt1"><code class="comments"># of all nodes</code></div><div class="line number3 index2 alt2"> </div><div class="line number4 index3 alt1"><code class="comments"># Helper function that allocates a new </code></div><div class="line number5 index4 alt2"><code class="comments"># node with the given data and None </code></div><div class="line number6 index5 alt1"><code class="comments"># left and right pointers.                                     </code></div><div class="line number7 index6 alt2"><code class="keyword">class</code> <code class="plain">newNode: </code></div><div class="line number8 index7 alt1"> </div><div class="line number9 index8 alt2"><code class="undefined spaces">    </code><code class="comments"># Construct to create a new node </code></div><div class="line number10 index9 alt1"><code class="undefined spaces">    </code><code class="keyword">def</code> <code class="plain">__init__(</code><code class="color1">self</code><code class="plain">, key): </code></div><div class="line number11 index10 alt2"><code class="undefined spaces">        </code><code class="color1">self</code><code class="plain">.data </code><code class="keyword">=</code> <code class="plain">key</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">        </code><code class="color1">self</code><code class="plain">.left </code><code class="keyword">=</code> <code class="color1">None</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">        </code><code class="color1">self</code><code class="plain">.right </code><code class="keyword">=</code> <code class="color1">None</code></div><div class="line number14 index13 alt1"> </div><div class="line number15 index14 alt2"><code class="keyword">def</code> <code class="plain">printLevel( root):</code></div><div class="line number16 index15 alt1"> </div><div class="line number17 index16 alt2"><code class="undefined spaces">    </code><code class="keyword">if</code> <code class="plain">(</code><code class="keyword">not</code> <code class="plain">root):</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">        </code><code class="keyword">return</code></div><div class="line number19 index18 alt2"> </div><div class="line number20 index19 alt1"><code class="undefined spaces">    </code><code class="comments"># queue to hold tree node with level</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">    </code><code class="plain">q </code><code class="keyword">=</code> <code class="plain">[] </code></div><div class="line number22 index21 alt1"> </div><div class="line number23 index22 alt2"><code class="undefined spaces">    </code><code class="comments"># let root node be at level 1</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">    </code><code class="plain">q.append([root, </code><code class="value">1</code><code class="plain">])</code></div><div class="line number25 index24 alt2"> </div><div class="line number26 index25 alt1"><code class="undefined spaces">    </code><code class="plain">p </code><code class="keyword">=</code> <code class="plain">[]</code></div><div class="line number27 index26 alt2"> </div><div class="line number28 index27 alt1"><code class="undefined spaces">    </code><code class="comments"># Do level Order Traversal of tree</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">    </code><code class="keyword">while</code> <code class="plain">(</code><code class="functions">len</code><code class="plain">(q)): </code></div><div class="line number30 index29 alt1"><code class="undefined spaces">        </code><code class="plain">p </code><code class="keyword">=</code> <code class="plain">q[</code><code class="value">0</code><code class="plain">]</code></div><div class="line number31 index30 alt2"><code class="undefined spaces">        </code><code class="plain">q.pop(</code><code class="value">0</code><code class="plain">)</code></div><div class="line number32 index31 alt1"><code class="undefined spaces">        </code><code class="keyword">print</code><code class="plain">(</code><code class="string">"Level of"</code><code class="plain">, p[</code><code class="value">0</code><code class="plain">].data, </code><code class="string">"is"</code><code class="plain">, p[</code><code class="value">1</code><code class="plain">])</code></div><div class="line number33 index32 alt2"><code class="undefined spaces">        </code><code class="keyword">if</code> <code class="plain">(p[</code><code class="value">0</code><code class="plain">].left):</code></div><div class="line number34 index33 alt1"><code class="undefined spaces">            </code><code class="plain">q.append([p[</code><code class="value">0</code><code class="plain">].left, p[</code><code class="value">1</code><code class="plain">] </code><code class="keyword">+</code> <code class="value">1</code><code class="plain">])</code></div><div class="line number35 index34 alt2"><code class="undefined spaces">        </code><code class="keyword">if</code> <code class="plain">(p[</code><code class="value">0</code><code class="plain">].right):</code></div><div class="line number36 index35 alt1"><code class="undefined spaces">            </code><code class="plain">q.append([p[</code><code class="value">0</code><code class="plain">].right, p[</code><code class="value">1</code><code class="plain">] </code><code class="keyword">+</code> <code class="value">1</code> <code class="plain">])</code></div><div class="line number37 index36 alt2"> </div><div class="line number38 index37 alt1"><code class="comments"># Driver Code </code></div><div class="line number39 index38 alt2"><code class="keyword">if</code> <code class="plain">__name__ </code><code class="keyword">=</code><code class="keyword">=</code> <code class="string">'__main__'</code><code class="plain">:</code></div><div class="line number40 index39 alt1"><code class="undefined spaces">    </code> </div><div class="line number41 index40 alt2"><code class="undefined spaces">    </code><code class="comments">""" </code></div><div class="line number42 index41 alt1"><code class="undefined spaces">    </code><code class="comments">Let us create Binary Tree shown </code></div><div class="line number43 index42 alt2"><code class="undefined spaces">    </code><code class="comments">in above example """</code></div><div class="line number44 index43 alt1"><code class="undefined spaces">    </code><code class="plain">root </code><code class="keyword">=</code> <code class="plain">newNode(</code><code class="value">3</code><code class="plain">)</code></div><div class="line number45 index44 alt2"><code class="undefined spaces">    </code><code class="plain">root.left </code><code class="keyword">=</code> <code class="plain">newNode(</code><code class="value">2</code><code class="plain">)</code></div><div class="line number46 index45 alt1"><code class="undefined spaces">    </code><code class="plain">root.right </code><code class="keyword">=</code> <code class="plain">newNode(</code><code class="value">5</code><code class="plain">)</code></div><div class="line number47 index46 alt2"><code class="undefined spaces">    </code><code class="plain">root.left.left </code><code class="keyword">=</code> <code class="plain">newNode(</code><code class="value">1</code><code class="plain">)</code></div><div class="line number48 index47 alt1"><code class="undefined spaces">    </code><code class="plain">root.left.right </code><code class="keyword">=</code> <code class="plain">newNode(</code><code class="value">4</code><code class="plain">)</code></div><div class="line number49 index48 alt2"><code class="undefined spaces">    </code><code class="plain">printLevel(root)</code></div><div class="line number50 index49 alt1"> </div><div class="line number51 index50 alt2"><code class="comments"># This code is contributed by</code></div><div class="line number52 index51 alt1"><code class="comments"># Shubham Singh(SHUBHAMSINGH10)</code></div></div></td></tr></tbody></table></div>




using System;
using System.Collections.Generic;
 
// C# program to print 
// levels of all nodes
public class Print_Level_Btree
{
 
    /* A tree node structure */
    public class Node
    {
        public int data;
        public Node left;
        public Node right;
        public Node(int data)
        {
            this.data = data;
            left = null;
            right = null;
        }
    }
 
    // User defined class Pair to hold 
    // the node and its level
    public class Pair
    {
        public Node n;
        public int i;
        public Pair(Node n, int i)
        {
            this.n = n;
            this.i = i;
        }
 
    }
 
    // function to print the nodes and 
    // its corresponding level
    public static void printLevel(Node root)
    {
        if (root == null)
        {
            return;
        }
 
        // queue to hold tree node with level
        LinkedList<Pair> q = new LinkedList<Pair>();
 
        // let root node be at level 1
        q.AddLast(new Pair(root, 1));
 
        Pair p;
 
        // Do level Order Traversal of tree
        while (q.Count > 0)
        {
            p = q.First.Value;
            q.RemoveFirst();
 
            Console.WriteLine("Level of " + p.n.data + " is " + p.i);
            if (p.n.left != null)
            {
                q.AddLast(new Pair(p.n.left, p.i + 1));
            }
            if (p.n.right != null)
            {
                q.AddLast(new Pair(p.n.right, p.i + 1));
            }
        }
    }
 
    /* Driver function to test above
        functions */
    public static void Main(string[] args)
    {
        Node root = null;
 
        /* Constructing tree given in the 
              above figure */
        root = new Node(3);
        root.left = new Node(2);
        root.right = new Node(5);
        root.left.left = new Node(1);
        root.left.right = new Node(4);
 
        printLevel(root);
    }
}
 
  // This code is contributed by Shrikant13




<script>
    // Javascript program to print
    // levels of all nodes
     
    class Node
    {
        constructor(data) {
           this.left = null;
           this.right = null;
           this.data = data;
        }
    }
 
    // function to print the nodes and
    // its corresponding level
    function printLevel(root)
    {
        if (root == null)
            return;
        
        // queue to hold tree node with level
        let q = [];
        
        // let root node be at level 1
        q.push([root, 1]);
        
        let p;
        
        // Do level Order Traversal of tree
        while (q.length > 0) {
            p = q[0];
            q.shift();
        
            document.write("Level of " + p[0].data +
                    " is " + p[1] + "</br>");
            if (p[0].left != null)
                q.push([p[0].left, p[1] + 1]);
            if (p[0].right != null)
                q.push([p[0].right, p[1] + 1]);
        }
    }
     
    let root = null;
        
    /* Constructing tree given in the
                above figure */
    root = new Node(3);
    root.left = new Node(2);
    root.right = new Node(5);
    root.left.left = new Node(1);
    root.left.right = new Node(4);
 
    printLevel(root);
     
    // This code is contributed by suresh07.
</script>

Output
Level of 3 is 1
Level of 2 is 2
Level of 5 is 2
Level of 1 is 3
Level of 4 is 3

Time Complexity: O(n) where n is the number of nodes in the given Binary Tree.
Auxiliary Space: O(n) where n is the number of nodes in the given Binary tree due to queue data structure.
 

 


Article Tags :