Monday, 15 September 2014

java - Summing binary tree levels -



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