mirror of
https://github.moeyy.xyz/https://github.com/trekhleb/javascript-algorithms.git
synced 2024-12-26 23:21:18 +08:00
Create getters and setters for meta data in binary tree node.
This commit is contained in:
parent
02d7abcf65
commit
e572de63cb
@ -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}
|
||||||
*/
|
*/
|
||||||
|
@ -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');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user