Rearrange the nodes of a linked list
May 7, 2018
Remove all white spaces from a string
May 28, 2018

Difference between nodes of alternate vertical levels in a tree

The question below is given in the format in which questions are asked on coding interview Platforms like HackerRank, CodeChef, CodeJam, etc.

Solution:
You can see the question live on hackerrank.com at the link below:
https://www.hackerrank.com/contests/rtech-april-18-01/challenges/vertical-level-sum-differences
Some of the solutions are:
Java

import java.io.*;
import java.util.*;
public class Solution {
    Node root;
    static int odd=0,even=0;
    public static class Node{
        int data;
        Node left;
        Node right;
        Node(int data){
            this.data=data;
            left=null;
            right=null;
        }
    }
    public static Node insert(int a[],Node root,int i){
        if (i < a.length) {
            if(a[i]==-1){
             Node temp = null;
            }
            else{
                Node temp = new Node(a[i]);
                root = temp;
             root.left = insert(a, root.left,2 * i + 1);
            root.right = insert(a, root.right, 2 * i + 2);
            }
        }
        return root;
    }
    public static void print(Node root,int i){
        if(root!=null){
            print(root.left,i-1);
            if(i%2==0)
                even+=root.data;
            else
                odd+=root.data;
            //System.out.println(root.data);
            print(root.right,i+1);
        }
    }
    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int a[]=new int[n];
        for(int i=0;i<n;i++)
            a[i]=sc.nextInt();
        Solution sol=new Solution();
        sol.root=insert(a,sol.root,0);
        print(sol.root,0);
        System.out.println((even)-(odd));
    }
}

C++ Solution:

int a[100005];
int b[100005];
int main()
{
    int n;
    cin >> n;
    for(int i = 1 ; i<=n ; i++) { cin >> a[i];
    }
    b[1] = 0;
    for(int i = 1 ; i<=n ; i++)
    {
        b[2*i] = b[i]-1;
        b[2*i+1] = b[i]+1;
    }
    int even = 0 , odd = 0;
    for(int i = 1 ; i<=n ; i++)
    {
        if(abs(b[i])%2==0)
        {
            if(a[i]!=-1)
            {
                even+=a[i];
            }
        }
        else
        {
            if(a[i]!=-1)
            {
                odd+=a[i];
            }
        }
    }
    cout << even - odd;
    return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *