java - Summing binary tree levels -
i'm trying traverse binary tree level, sum ints held in each node per level held in levelsum. want multiply levelsum number of level @ , add together totalsum. when run nullpointexception on line 15 haven't been able figure out why.
public int depthsum() { queue<inttreenode> q = new linkedlist<inttreenode>(); int totalsum = 0; int levelsum = 0; int multiplier = 1; int nodesperlevel = 0; if(overallroot != null) { q.offer(overallroot); nodesperlevel += 1; while(!q.isempty()) { int countdown = nodesperlevel; while(countdown > 0) { countdown--; inttreenode n = q.remove(); levelsum += n.data; //this line 15 if(n.left != null) { q.offer(n.left); nodesperlevel++; } if(n.right != null) { q.offer(n.right); nodesperlevel++; } } totalsum += (multiplier * levelsum); levelsum = 0; multiplier++; } } return totalsum } this stack trace:
nullpointerexception on line 15: java.lang.nullpointerexception @ inttree.depthsum (line 15)
if had guess, countdown not hold right value; however, given lot of variables undefined in code hard tell failure is.
if countdown faulty, inner loop empty queue. when happens n = null, , trying phone call n.data, n.left, or n.right give nullpointerexception.
below similar version of think trying (ideone illustration here):
public int depthsum(inttreenode root) { if(root == null) throw new nullpointerexception(); queue<inttreenode> q = new linkedlist<inttreenode>(); q.add(root); int siblings = 1; int totalsum = 0, levelsum = 0, level = 0; while(!q.isempty()) { inttreenode n = q.remove(); // remove 1 node per loop levelsum += n.data; if(n.left != null) // add together left kid q.add(n.left); if(n.right != null) // add together right kid q.add(n.right); if(--siblings == 0){ // siblings have been probed siblings = q.size(); // remaining nodes siblings totalsum += levelsum * level; // increment totalsum level++; // increment level levelsum = 0; // reinitialize levelsum } } homecoming totalsum; } java
No comments:
Post a Comment