mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-04 07:29:47 +08:00

* chore: Switch to Node 20 + Vitest * chore: migrate to vitest mock functions * chore: code style (switch to prettier) * test: re-enable long-running test Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime! see #1193 * chore: code style * chore: fix failing tests * Updated Documentation in README.md * Update contribution guidelines to state usage of Prettier * fix: set prettier printWidth back to 80 * chore: apply updated code style automatically * fix: set prettier line endings to lf again * chore: apply updated code style automatically --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
70 lines
1.5 KiB
JavaScript
70 lines
1.5 KiB
JavaScript
/*
|
|
Breadth First Tree Traversal or level order traversal implementation in javascript
|
|
Author: @GerardUbuntu
|
|
*/
|
|
|
|
class Node {
|
|
constructor(data) {
|
|
this.data = data
|
|
this.left = null
|
|
this.right = null
|
|
}
|
|
}
|
|
|
|
class BinaryTree {
|
|
constructor() {
|
|
this.root = null
|
|
}
|
|
|
|
breadthFirstIterative() {
|
|
const traversal = []
|
|
if (this.root) {
|
|
traversal.push(this.root)
|
|
}
|
|
for (let i = 0; i < traversal.length; i++) {
|
|
const currentNode = traversal[i]
|
|
if (currentNode.left) {
|
|
traversal.push(currentNode.left)
|
|
}
|
|
if (currentNode.right) {
|
|
traversal.push(currentNode.right)
|
|
}
|
|
traversal[i] = currentNode.data
|
|
}
|
|
return traversal
|
|
}
|
|
|
|
breadthFirstRecursive() {
|
|
const traversal = []
|
|
const h = this.getHeight(this.root)
|
|
for (let i = 0; i !== h; i++) {
|
|
this.traverseLevel(this.root, i, traversal)
|
|
}
|
|
return traversal
|
|
}
|
|
|
|
// Computing the height of the tree
|
|
getHeight(node) {
|
|
if (node === null) {
|
|
return 0
|
|
}
|
|
const lheight = this.getHeight(node.left)
|
|
const rheight = this.getHeight(node.right)
|
|
return lheight > rheight ? lheight + 1 : rheight + 1
|
|
}
|
|
|
|
traverseLevel(node, levelRemaining, traversal) {
|
|
if (node === null) {
|
|
return
|
|
}
|
|
if (levelRemaining === 0) {
|
|
traversal.push(node.data)
|
|
} else {
|
|
this.traverseLevel(node.left, levelRemaining - 1, traversal)
|
|
this.traverseLevel(node.right, levelRemaining - 1, traversal)
|
|
}
|
|
}
|
|
}
|
|
|
|
export { BinaryTree, Node }
|