Question
I need help for this code to pass these test specs: class TreeNode { constructor(value, left, right, level) { this.value = value; this.left = left;
I need help for this code to pass these test specs:
class TreeNode {
constructor(value, left, right, level) {
this.value = value;
this.left = left;
this.right = right;
this.level = level
}
}
// Given a tree, find the first (left-most) node at each
// level of the tree and return it in an array, with the root at the
// 0th index, and the left-most node in the deepest level of the tree
// in the last index.
// 5
// / \
// 4 7
// / \ \
// 1 3 2
// / / \
// 8 4 9
// / \
// 2 4
// Expected Output -> [ 5, 4, 1, 8, 2 ]
function findFirstNodes(root) {
const stack = [root];
root.level = 0;
const firsts = [];
while (stack.length > 0) {
const curr = stack.pop();
if (!firsts[curr.level]) {
firsts.push(curr.value);
}
if (curr.left) {
stack.shift(curr.left);
}
}
return firsts;
}
// Uncomment the code below for local testing.
// // Build a tree for testing
// const simpleTree = new TreeNode(4, null, null);
// simpleTree.right = new TreeNode(8, null, null);
// simpleTree.left = new TreeNode(3, null, null);
// simpleTree.right.right = new TreeNode(2, null, null);
// // Test the function with the debug tree
// console.log(findFirstNodes(simpleTree)); // -> [ 4, 3, 2 ]
TEST CASE:
const { expect } = require('chai');
const assert = require('assert');
try {
({ TreeNode, findFirstNodes } = require('../tree_project'));
} catch (e) { console.log("Failed to load dependencies") }
describe('Left Only', () => {
const leftOnly = new TreeNode(5, null, null);
leftOnly.left = new TreeNode(9, null, null);
leftOnly.left.left = new TreeNode(7, null, null);
leftOnly.left.left.left = new TreeNode(8, null, null);
context('Leftmost at level', () => {
it(`Produces an array with the leftmost element in each level`, () => {
const leftMostNodes = findFirstNodes(leftOnly)
expect(leftMostNodes).to.deep.equal([ 5, 9, 7, 8 ])
});
});
});
describe('Triangle tree', () => {
const triangleTree = new TreeNode(8, null, null);
triangleTree.left = new TreeNode(2, null, null);
triangleTree.right = new TreeNode(4, null, null);
context('Leftmost at level', () => {
it(`Produces an array with the leftmost element in each level`, () => {
const leftMostNodes = findFirstNodes(triangleTree)
expect(leftMostNodes).to.deep.equal([ 8, 2 ])
});
});
});
describe('Simple Tree', () => {
const simpleTree = new TreeNode(4, null, null);
simpleTree.right = new TreeNode(3, null, null);
simpleTree.left = new TreeNode(1, null, null);
simpleTree.right.right = new TreeNode(2, null, null);
context('Leftmost at level', () => {
it(`Produces an array with the leftmost element in each level`, () => {
const leftMostNodes = findFirstNodes(simpleTree)
expect(leftMostNodes).to.deep.equal([ 4, 1, 2 ])
});
});
});
describe('Complex Tree', () => {
const complexTree = new TreeNode(5, null, null);
complexTree.left = new TreeNode(4, null, null);
complexTree.left.left = new TreeNode(1, null, null);
complexTree.left.right = new TreeNode(3, null, null);
complexTree.left.right.left = new TreeNode(8, null, null);
complexTree.right = new TreeNode(7, null, null);
complexTree.right.right = new TreeNode(2, null, null);
complexTree.right.right.left = new TreeNode(4, null, null);
complexTree.right.right.right = new TreeNode(9, null, null);
complexTree.right.right.right.left = new TreeNode(2, null, null);
complexTree.right.right.right.right = new TreeNode(4, null, null);
context('Leftmost at level', () => {
it(`Produces an array with the leftmost element in each level`, () => {
const leftMostNodes = findFirstNodes(complexTree)
expect(leftMostNodes).to.deep.equal([ 5, 4, 1, 8, 2 ])
});
});
});
describe('Letter Tree', () => {
const letterTree = new TreeNode('W', null, null);
letterTree.right = new TreeNode('X', null, null);
letterTree.left = new TreeNode('Z', null, null);
letterTree.left.left = new TreeNode('R', null, null);
letterTree.right.left = new TreeNode('P', null, null);
letterTree.right.left.right = new TreeNode('Q', null, null);
context('Leftmost at level', () => {
it(`Produces an array with the leftmost element in each level`, () => {
const leftMostNodes = findFirstNodes(letterTree)
expect(leftMostNodes).to.deep.equal([ 'W', 'Z', 'R', 'Q' ])
});
});
});
describe('Negative Numbers', () => {
const negativeTree = new TreeNode(-7, null, null);
negativeTree.left = new TreeNode(-4, null, null);
negativeTree.left.left = new TreeNode(5, null, null);
negativeTree.left.right = new TreeNode(-9, null, null);
negativeTree.left.right.left = new TreeNode(4, null, null);
negativeTree.right = new TreeNode(6, null, null);
negativeTree.right.right = new TreeNode(-1, null, null);
negativeTree.right.right.left = new TreeNode(-6, null, null);
negativeTree.right.right.right = new TreeNode(8, null, null);
negativeTree.right.right.right.left = new TreeNode(4, null, null);
negativeTree.right.right.right.right = new TreeNode(-3, null, null);
context('Leftmost at level', () => {
it(`Produces an array with the leftmost element in each level`, () => {
const leftMostNodes = findFirstNodes(negativeTree)
expect(leftMostNodes).to.deep.equal([ -7, -4, 5, 4, 4 ])
});
});
});
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started