mappingTree構(gòu)造

添加結(jié)點MappingNode

增加子結(jié)點策略:每個結(jié)點下面有多個子節(jié)點,每個節(jié)點主要記錄最左子結(jié)點和右兄弟結(jié)點,多個孩子時,子結(jié)點按照從大到小順序從左到右進(jìn)行排序。最右面的結(jié)點的有兄弟結(jié)點=null
root:root節(jié)點
leftMostChild :root結(jié)點的最左子結(jié)點
child:當(dāng)前要插入的結(jié)點
position:遍歷的計數(shù)器,記錄遍歷的當(dāng)前結(jié)點
prev:遍歷的計數(shù)器,記錄遍歷的當(dāng)前節(jié)點的前一個結(jié)點

public void linkAsChild(final MappingNode child) {
1.leftMostChild 不存在,root添加child作為leftMostChild
if (this.leftMostChild == null) { this.leftMostChild = child;
2.leftMostChild存在,依次遍歷子結(jié)點,從leftMostChild 開始:
} else { MappingNode prev = null; MappingNode position = this.leftMostChild; while (true) {
2.1position=null,遍歷到最右,將child添加到最后一個子結(jié)點prev后
if (position == null) { prev.sibling = child; break; }
2.2child>position,
int c = child.getMapping().compareTo(position.getMapping()); if (c < 0) {
2.2.1prev==null,root添加child作為leftMostChild
child.sibling = position; if (prev == null) { this.leftMostChild = child;
2.2.2prev!=null,child插入prev和position中間
} else { prev.sibling = child; } break;
2.3child<=position,比較下一個結(jié)點,從1)開始
} else { prev = position; position = position.sibling; } } } }

圖:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容