+3 votes
in JAVA by
Write a program in Java to calculate the difference between the sum of the odd level and even level nodes of a Binary Tree.

1 Answer

0 votes
by
Consider the following program.

import java.util.LinkedList;  

import java.util.Queue;  

   

public class DiffOddEven {  

      

    //Represent a node of binary tree  

    public static class Node{  

        int data;  

        Node left;  

        Node right;  

          

        public Node(int data){  

            //Assign data to the new node, set left and right children to null  

            this.data = data;  

            this.left = null;  

            this.right = null;  

            }  

        }  

      

    //Represent the root of binary tree  

    public Node root;  

    

    public DiffOddEven(){  

        root = null;  

    }  

   

    //difference() will calculate the difference between sum of odd and even levels of binary tree  

    public int difference() {  

          int oddLevel = 0, evenLevel = 0, diffOddEven = 0;  

            

          //Variable nodesInLevel keep tracks of number of nodes in each level  

          int nodesInLevel = 0;  

            

          //Variable currentLevel keep track of level in binary tree  

          int currentLevel = 0;  

            

          //Queue will be used to keep track of nodes of tree level-wise  

          Queue<Node> queue = new LinkedList<Node>();  

            

          //Check if root is null  

          if(root == null) {  

              System.out.println("Tree is empty");  

              return 0;  

          }  

          else {  

              //Add root node to queue as it represents the first level  

              queue.add(root);  

              currentLevel++;  

                

              while(queue.size() != 0) {  

                    

                  //Variable nodesInLevel will hold the size of queue i.e. number of elements in queue  

                  nodesInLevel = queue.size();  

                    

                  while(nodesInLevel > 0) {  

                      Node current = queue.remove();  

                        

                    //Checks if currentLevel is even or not.  

                      if(currentLevel % 2 == 0)  

                          //If level is even, add nodes's to variable evenLevel  

                          evenLevel += current.data;  

                      else  

                          //If level is odd, add nodes's to variable oddLevel  

                          oddLevel += current.data;  

                        

                      //Adds left child to queue  

                      if(current.left != null)  

                          queue.add(current.left);  

                      //Adds right child to queue  

                      if(current.right != null)   

                          queue.add(current.right);  

                     nodesInLevel--;  

                  }  

                  currentLevel++;  

              }  

              //Calculates difference between oddLevel and evenLevel  

              diffOddEven = Math.abs(oddLevel - evenLevel);  

          }  

          return diffOddEven;  

      }  

    

    public static void main (String[] args) {  

          

        DiffOddEven bt = new DiffOddEven();  

        //Add nodes to the binary tree  

        bt.root = new Node(1);  

        bt.root.left = new Node(2);  

        bt.root.right = new Node(3);  

        bt.root.left.left = new Node(4);  

        bt.root.right.left = new Node(5);  

        bt.root.right.right = new Node(6);  

      

        //Display the difference between sum of odd level and even level nodes  

        System.out.println("Difference between sum of odd level and even level nodes: " + bt.difference());  

}  

}
...