//if it's special, get the next sub tree root
if (getBeForSpecialTree().hasMoreElements()) {
((Id2nodeBTree) getBtree()).indexBTree.acquire(kContext, IDBIndex.READ_MODE);
byte[] bRoot = (byte[]) ((Id2nodeBTree) getBtree()).indexBTree.lookup((Key) getBeForSpecialTree().nextElement(), getkContext());
((Id2nodeBTree) getBtree()).indexBTree.release(kContext);
PageNumber subroot = new PageNumber(ByteTool.bytesToInt(bRoot, 0, getBtreeSpec().isMsbFirst()));
subroot.setTreeId(getBtree().getBtreeId());
//remember visited root
getVisitedRoot().put(subroot, subroot);
TreeEnumeratorUtils.findLeftMostLeaf(this, subroot);
} else {
//return false;
boolean notFound = true;
while (getEnumId2root().hasMoreElements()) {
PageNumber subroot = (PageNumber) getEnumId2root().nextElement();
if (!getVisitedRoot().containsKey(subroot)) {
TreeEnumeratorUtils.findLeftMostLeaf(this, subroot);
getVisitedRoot().put(subroot, subroot);
notFound = false;
break;