📌  相关文章
📜  查找给定每个节点的子 ID 总和的树的根

📅  最后修改于: 2022-05-13 01:57:17.465000             🧑  作者: Mango

查找给定每个节点的子 ID 总和的树的根

考虑一棵二叉树,其节点的 id 从 1 到 n,其中 n 是树中的节点数。树是作为 n 对的集合给出的,其中每一对代表节点 ID 和子 ID 的总和。
例子:

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.

乍一看,这个问题似乎是一个典型的树数据结构问题,但它
可以如下解决。
每个节点 id 都出现在除根之外的子总和中。因此,如果我们对所有 id 进行求和,然后从所有子项的总和中减去它,我们就得到了 root。

C++
// Find root of tree where children
// sum for every node id is given.
#include
using namespace std;
 
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 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;
}


Java
// 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 */


Python3
"""Find root of tree where children
sum 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 Code
if __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#
// 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 */


Javascript


输出:

6