Find root of the tree where children id sum for every node is given - GeeksforGeeks

25 May, 2021
Consider a binary tree whose nodes have ids from 1 to n where n is number of nodes in the tree. The tree is given as a collection of n pairs, where every pair represents node id and sum of children ids.Examples:  
Input : 1 5
        2 0
        3 0
        4 0
        5 5
        6 5
Output: 6
Explanation: In this case, two trees can 
be made as follows and 6 is the root node.
   6          6
   \         / \
    5       1   4
   / \       \
  1   4       5
 / \         / \
2   3       2   3

Input : 4 0
Output: 4
Explanation: Clearly 4 does 
not have any children and is the
only node i.e., the root node.
 
At first sight, this question appears to be a typical question of tree data structure but it can be solved as follows.Every node id appears in children sum except root. So if we do sum of all ids and subtract it from sum of all children sums, we get root. 
C++
Java
Python3
C#
Javascript
// Find root of tree where children// sum for every node id is given.#include<bits/stdc++.h>using namespace std; int findRoot(pair<int, int> arr[], int n){   // Every node appears once as an id, and   // every node except for the root appears   // once in a sum.  So if we subtract all   // the sums from all the ids, we're left   // with the root id.   int root = 0;   for (int i=0; i<n; i++)     root += (arr[i].first - arr[i].second);    return root;} // Driver codeint main(){    pair<int, int> arr[] = {{1, 5}, {2, 0},           {3, 0}, {4, 0}, {5, 5}, {6, 5}};    int n = sizeof(arr)/sizeof(arr[0]);    printf("%d\n", findRoot(arr, n));    return 0;}
// Find root of tree where children// sum for every node id is given. class GFG{     static class pair    {         int first, second;         public pair(int first, int second)        {            this.first = first;            this.second = second;        }     }     static int findRoot(pair arr[], int n)    {        // Every node appears once as an id, and        // every node except for the root appears        // once in a sum. So if we subtract all        // the sums from all the ids, we're left        // with the root id.        int root = 0;        for (int i = 0; i < n; i++)        {            root += (arr[i].first - arr[i].second);        }         return root;    }     // Driver code    public static void main(String[] args)    {        pair arr[] = {new pair(1, 5), new pair(2, 0),                    new pair(3, 0), new pair(4, 0),                    new pair(5, 5), new pair(6, 5)};        int n = arr.length;        System.out.printf("%d\n", findRoot(arr, n));    } } /* This code is contributed by PrinciRaj1992 */
"""Find root of tree where childrensum for every node id is given""" def findRoot(arr, n) :     # Every node appears once as an id, and    # every node except for the root appears    # once in a sum. So if we subtract all    # the sums from all the ids, we're left    # with the root id.    root = 0    for i in range(n):        root += (arr[i][0] - arr[i][1])    return root                         # Driver Codeif __name__ == '__main__':     arr = [[1, 5], [2, 0],           [3, 0], [4, 0],           [5, 5], [6, 5]]    n = len(arr)    print(findRoot(arr, n)) # This code is contributed# by SHUBHAMSINGH10
// C# Find root of tree where children// sum for every node id is given.using System;     class GFG{     public class pair    {         public int first, second;         public pair(int first, int second)        {            this.first = first;            this.second = second;        }     }     static int findRoot(pair []arr, int n)    {        // Every node appears once as an id, and        // every node except for the root appears        // once in a sum. So if we subtract all        // the sums from all the ids, we're left        // with the root id.        int root = 0;        for (int i = 0; i < n; i++)        {            root += (arr[i].first - arr[i].second);        }         return root;    }     // Driver code    public static void Main(String[] args)    {        pair []arr = {new pair(1, 5), new pair(2, 0),                    new pair(3, 0), new pair(4, 0),                    new pair(5, 5), new pair(6, 5)};        int n = arr.Length;        Console.Write("{0}\n", findRoot(arr, n));    } } /* This code is contributed by PrinciRaj1992 */
<script> // Javascript: Find root of tree where children// sum for every node id is given. /*Every node appears once as an id, andevery node except for the root appearsonce in a sum. So if we subtract allthe sums from all the ids, we're leftwith the root id. */  const findRoot = (nodeList) => {    let root = 0;    nodeList.forEach(element =>    root+=(Number(element[0]) - Number(element[1])));    return root ;}  let nodeList = [[1, 5], [2, 0],                [3, 0], [4, 0],                [5, 5], [6, 5]];let root = findRoot(nodeList);document.write(root); // This code is contributed by bharathmkulkarni </script>
Output:  
6
This article is contributed by Sunidhi Chaudhary. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.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. 
SHUBHAMSINGH10
princiraj1992
bharathmkulkarni
Tree
Tree
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Tree Traversals (Inorder, Preorder and Postorder)
Binary Tree | Set 1 (Introduction)
Level Order Binary Tree Traversal
AVL Tree | Set 1 (Insertion)
Inorder Tree Traversal without Recursion
Binary Tree | Set 3 (Types of Binary Tree)
Write a Program to Find the Maximum Depth or Height of a Tree
Binary Tree | Set 2 (Properties)
A program to check if a binary tree is BST or not