Calculating Total Weight of Subtree

Q

Subject: Calculating Total Weight of Subtree --- Category: ,1, --- Question

Can you write a computer code for the following problem:

Given a text file with 3 comma-delimited columns of all integers: 'id', 'parent' and 'weight'. Each line represents a node identified by 'id'. 'parent' refers to 'id' of another node. Print out, for each node, the total weight of a subtree below this node.

✍: Guest

A Here is the solution in Java:

```import java.io.*;
import java.util.*;
public class PrintWeight {
public static void main(String[] a) {
Hashtable<String, String> parentMap = new Hashtable<String, String>();
Hashtable<String, Long> weightMap = new Hashtable<String, Long>();
try {
String line = null;
while ( (line = input.readLine()) != null ) {
String[] cols = line.split(",");
String id = cols.trim();
String parent = cols.trim();
long weight = Long.parseLong(cols);

Long totalWeight = weightMap.get(id);
if (totalWeight==null) {
weightMap.put(id, weight);
} else {
weightMap.put(id, totalWeight.longValue()+weight);
}
parentMap.put(id, parent);

weight = weightMap.get(id).longValue();
while ( parent!=null && parent.length()>0 ) {
totalWeight = weightMap.get(parent);
if (totalWeight==null) {
weightMap.put(parent, weight);
} else {
weightMap.put(parent, totalWeight.longValue()+weight);
}
parent = parentMap.get(parent);
}
}
input.close();
} catch (Exception e) {
e.printStackTrace();
}

Enumeration<String> nodes = weightMap.keys();
while(nodes.hasMoreElements()) {
String id = nodes.nextElement();
long weight = weightMap.get(id).longValue();
System.out.println(id+", "+weight);
}
}
}
```

2014-01-02, 2856👍, 0💬