feat: add tree.siblings

This commit is contained in:
vsavkin 2016-05-24 13:46:50 -07:00
parent 5bf1c93ead
commit 013f9a2bbc
2 changed files with 14 additions and 0 deletions

View File

@ -21,6 +21,14 @@ export class Tree<T> {
return n && n.children.length > 0 ? n.children[0].value : null;
}
siblings(t: T): T[] {
const p = findPath(t, this._root, []);
if (p.length < 2) return [];
const c = p[p.length - 2].children.map(c => c.value);
return c.filter(cc => cc !== t);
}
pathFromRoot(t: T): T[] { return findPath(t, this._root, []).map(s => s.value); }
contains(tree: Tree<T>): boolean { return contains(this._root, tree._root); }

View File

@ -24,6 +24,12 @@ describe('tree', () => {
expect(t.firstChild(2)).toEqual(null);
});
it("should return the siblings of a node", () => {
const t = new Tree<any>(new TreeNode<number>(1, [new TreeNode<number>(2, []), new TreeNode<number>(3, [])]));
expect(t.siblings(2)).toEqual([3]);
expect(t.siblings(1)).toEqual([]);
});
it("should return the path to the root", () => {
const t = new Tree<any>(new TreeNode<number>(1, [new TreeNode<number>(2, [])]));
expect(t.pathFromRoot(2)).toEqual([1, 2]);