Skip to content

Instantly share code, notes, and snippets.

@sebastianfdez
Last active April 27, 2020 17:09
Show Gist options
  • Save sebastianfdez/2375b3d39a099d7783c7cb85870fa453 to your computer and use it in GitHub Desktop.
Save sebastianfdez/2375b3d39a099d7783c7cb85870fa453 to your computer and use it in GitHub Desktop.
TransferValue and MergeNodes function
/**
* btree namespace.
* @type {BTree}
*/
export default class BTree {
...
/**
* Transfer one value from the origin to the target.
* @param {BTreeNode} origin
* @param {BTreeNode} target
*/
transferValue(origin, target) {
const indexo = origin.parent.children.indexOf(origin);
const indext = origin.parent.children.indexOf(target);
if (indexo < indext) {
// Transfer value from parent to target
target.addValue(target.parent.removeValue(indexo));
// Transfer value from origin to parent
origin.parent.addValue(origin.removeValue(origin.n-1));
} else {
// Transfer value from parent to target
target.addValue(target.parent.removeValue(indext));
// Transfer value from origin to parent
origin.parent.addValue(origin.removeValue(0));
}
}
/**
* Merge 2 nodes into one
* @param {BTreeNode} origin
* @param {BTreeNode} target
*/
mergeNodes(origin, target) {
const indexo = origin.parent.children.indexOf(origin);
const indext = target.parent.children.indexOf(target);
// Add middle value of the parent into target node
target.addValue(target.parent.removeValue(Math.min(indexo, indext)));
// Add every value of origin into target node
for (let i = origin.n - 1; i >= 0; i--) {
target.addValue(origin.removeValue(i));
}
// Delete origin node reference
target.parent.deleteChild(indexo);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment