treeCountLeaves
Written on August 22, 2019
문제
Implement the countLeaves
function in this Tree class.
A leaf node is any node in the tree that has no children. countLeaves
should traverse the tree, and return the number of leaf nodes the tree contains.
풀이
var Tree = function(value) {
this.value = value;
this.children = [];
};
Tree.prototype.countLeaves = function() {
let count = 0;
const countChildren = node => {
if (node.children.length === 0) {
count++;
return;
}
for (let i = 0; i < node.children.length; i++) {
countChildren(node.children[i]);
}
};
countChildren(this);
return count;
};
/**
* You shouldn't need to change anything below here, but feel free to look.
*/
/**
* add an immediate child
* (wrap values in Tree nodes if they're not already)
*/
Tree.prototype.addChild = function(child) {
if (!child || !(child instanceof Tree)) {
child = new Tree(child);
}
if (!this.isDescendant(child)) {
this.children.push(child);
} else {
throw new Error("That child is already a child of this tree");
}
// return the new child node for convenience
return child;
};
/**
* check to see if the provided tree is already a child of this
* tree __or any of its sub trees__
*/
Tree.prototype.isDescendant = function(child) {
if (this.children.indexOf(child) !== -1) {
// `child` is an immediate child of this tree
return true;
} else {
for (var i = 0; i < this.children.length; i++) {
if (this.children[i].isDescendant(child)) {
// `child` is descendant of this tree
return true;
}
}
return false;
}
};
/**
* remove an immediate child
*/
Tree.prototype.removeChild = function(child) {
var index = this.children.indexOf(child);
if (index !== -1) {
// remove the child
this.children.splice(index, 1);
} else {
throw new Error("That node is not an immediate child of this tree");
}
};
👩🏻💻 배우는 것을 즐기는 프론트엔드 개발자 입니다
부족한 블로그에 방문해 주셔서 감사합니다 🙇🏻♀️
in the process of becoming the best version of myself