Create getters and setters for meta data in binary tree node.

This commit is contained in:
Oleksii Trekhleb 2018-05-31 07:37:31 +03:00
parent 02d7abcf65
commit e572de63cb
2 changed files with 43 additions and 1 deletions

View File

@ -5,7 +5,7 @@ export default class BinaryTreeNode {
* @param {*} [value] - node value. * @param {*} [value] - node value.
* @param {Object} meta - any meta information that needs to be attached to the node. * @param {Object} meta - any meta information that needs to be attached to the node.
*/ */
constructor(value = null, meta = null) { constructor(value = null, meta = {}) {
this.left = null; this.left = null;
this.right = null; this.right = null;
this.parent = null; this.parent = null;
@ -157,6 +157,29 @@ export default class BinaryTreeNode {
return traverse; return traverse;
} }
/**
* @param {string} property
* @param {*} value
* @return {BinaryTreeNode}
*/
setMeta(property, value) {
this.meta[property] = value;
return this;
}
/**
* @param property
* @return {*}
*/
getMeta(property) {
if (!this.meta || !Object.prototype.hasOwnProperty.call(this.meta, property)) {
return null;
}
return this.meta[property];
}
/** /**
* @return {string} * @return {string}
*/ */

View File

@ -204,4 +204,23 @@ describe('BinaryTreeNode', () => {
expect(redNode.meta.color).toBe('red'); expect(redNode.meta.color).toBe('red');
expect(blackNode.meta.color).toBe('black'); expect(blackNode.meta.color).toBe('black');
}); });
it('should be possible to use get/set methods to change node meta information', () => {
const redNode = new BinaryTreeNode(1, { color: 'red' });
const blackNode = new BinaryTreeNode(2, { color: 'black' });
expect(redNode.getMeta('color')).toBe('red');
expect(blackNode.getMeta('color')).toBe('black');
redNode.setMeta('size', 8);
expect(redNode.getMeta('size')).toBe(8);
expect(redNode.getMeta('color')).toBe('red');
expect(redNode.getMeta('not_existing')).toBeNull();
// It must also be possible to override meta information.
redNode.setMeta('color', 'blue');
expect(redNode.getMeta('size')).toBe(8);
expect(redNode.getMeta('color')).toBe('blue');
});
}); });