2 回答

TA貢獻1829條經驗 獲得超6個贊
它確實是遞歸的。問題在于,只有兩個節(jié)點處于同一級別時,簡單的遞歸比較才會起作用。
// Same level compare
int compareSameLevel(Item item) {
int c = 0;
if (this.getParent != null) {
c = compare(this.getParent(), item.getParent());
}
return (c != 0) ? c : getName().compare(item.getName());
}
但是您可以調整級別以找到一個共同的級別并假設孩子們追隨父母:
// Compare on any level
int compare(Item item) {
Item thisItem = this;
int thisLevel = thisItem.level();
int itemLevel = item.level();
for (int i = thisLevel; i > itemLevel; i--) {
thisItem = thisItem.getParent();
}
for (int j = itemLevel; j > thisLevel; j--) {
item = item.getParent();
}
int c = compareSameLevel(thisItem, item);
return c != 0 ? c : (thisLevel > itemLevel ? -1 : 1);
}
這只是給你一個想法。它未經測試或編譯。

TA貢獻1874條經驗 獲得超12個贊
偽代碼:試試這樣
private static void printChildElements(List<Object> childNodes) {
for(Object childNode : childNodes) {
List<Object > childElements = childNode .....;
if(childElements.size() > 0) {
printChildElements( childElements);
}
}
添加回答
舉報