2012-03-04 1 views
0
for (Enumeration e = root.preorderEnumeration(); e.hasMoreElements() && theNode == null;) { 
     DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement(); 

    } 

Для примера выше, как вы можете узнать, насколько глубоко вы находитесь в ветке дерева? Если вы повторяете родных братьев и сестер, как вы их получите?Java: preorderEnumeration в TreeModel, как получить index index index и sibling?

ответ

1

Вы можете получить глубину, подсчитав количество родителей, итераций на getParent() от node до результата null.

Вы можете получить индекс node благодаря node.getIndex(node.getParent()).

Если вам нужна информация для каждого узла, с которым вы проходите, я рекомендую вам эффективно написать свой собственный код отправителя, либо вдохновленный от DefaultMutableTreeNode.getNextNode(), либо DefaultMutableTreeNode.PreorderEnumeration внутренний класс. В этом более позднем случае созданный стек должен содержать структуру { node, treeDepth, siblingIndex }

+0

не изобретать колесо, есть api для получения расстояния узла от корня: node.getLevel() Не знал об этом до недавнего времени, skimming the api doc творит чудеса :-) – kleopatra

+0

Согласен. getLevel() делает именно счет, который я описываю, но он неэффективен, если вам нужна эта информация для каждого узла. –