/** * Sets the heights of the level under the specified node * * @param root * the node under which level heights will be set */ protected void setLevelHeights(StandardTreeNode root) { List level = root.getNodesByLevel(); double max = 0.0; for (int i = 0; i < level.size(); i++) { List l = (List) level.get(i); for (int j = 0; j < l.size(); j++) { max = Math.max(max, ((StandardTreeNode) l.get(j)).height); } for (int j = 0; j < l.size(); j++) { ((StandardTreeNode) l.get(j)).levelheight = max; } max = 0; } }
/** * Return the nodes of the level of this node * * @return collection of nodes of same level */ public List getNodesByLevel() { List level = new ArrayList(); for (Iterator it = children.iterator(); it.hasNext();) { List l2 = ((StandardTreeNode) it.next()).getNodesByLevel(); if (level.size() < l2.size()) { List tmp = level; level = l2; l2 = tmp; } for (int i = 0; i < l2.size(); i++) { ((List) level.get(i)).addAll((List) l2.get(i)); } } ArrayList node = new ArrayList(); node.add(this); level.add(0, node); return level; }