!NPM
!GitHub top language
!npm
!eslint
!npm bundle size
!npm bundle size
!npm
What
Brief
This is a standalone Binary Tree data structure from the data-structure-typed collection. If you wish to access more
data structures or advanced features, you can transition to directly installing the
complete data-structure-typed package
How
install
$3
``bash
npm i binary-tree-typed --save
`
$3
`bash
yarn add binary-tree-typed
`
$3
[//]: # (No deletion!!! Start of Example Replace Section)
$3
`
typescript
// Create a BinaryTree with entries
const entries: [number, string][] = [
[6, 'six'],
[1, 'one'],
[2, 'two'],
[7, 'seven'],
[5, 'five'],
[3, 'three'],
[4, 'four'],
[9, 'nine'],
[8, 'eight']
]; const tree = new BinaryTree(entries);
// Verify size
console.log(tree.size); // 9;
// Add new element
tree.set(10, 'ten');
console.log(tree.size); // 10;
`
$3
`
typescript
const tree = new BinaryTree(
[
[5, 'five'],
[3, 'three'],
[7, 'seven'],
[1, 'one'],
[4, 'four'],
[6, 'six'],
[8, 'eight']
],
{ isMapMode: false }
); // Check if key exists
console.log(tree.has(5)); // true;
console.log(tree.has(10)); // false;
// Get value by key
console.log(tree.get(3)); // 'three';
console.log(tree.get(7)); // 'seven';
console.log(tree.get(100)); // undefined;
// Get node structure
const node = tree.getNode(5);
console.log(node?.key); // 5;
console.log(node?.value); // 'five';
`
$3
`
typescript
const tree = new BinaryTree([
[1, 'one'],
[2, 'two'],
[3, 'three'],
[4, 'four'],
[5, 'five'],
[6, 'six'],
[7, 'seven']
]); // Binary tree maintains level-order insertion
// Complete binary tree structure
console.log(tree.size); // 7;
// Verify all keys are present
console.log(tree.has(1)); // true;
console.log(tree.has(4)); // true;
console.log(tree.has(7)); // true;
// Iterate through tree
const keys: number[] = [];
for (const [key] of tree) {
keys.push(key);
}
console.log(keys.length); // 7;
`
$3
`
typescript
// Decision tree structure
const loanDecisionTree = new BinaryTree(
['stableIncome', 'goodCredit', 'Rejected', 'Approved', 'Rejected'],
{ isDuplicate: true }
); function determineLoanApproval(
node?: BinaryTreeNode | null,
conditions?: { [key: string]: boolean }
): string {
if (!node) throw new Error('Invalid node');
// If it's a leaf node, return the decision result
if (!node.left && !node.right) return node.key;
// Check if a valid condition exists for the current node's key
return conditions?.[node.key]
? determineLoanApproval(node.left, conditions)
: determineLoanApproval(node.right, conditions);
}
// Test case 1: Stable income and good credit score
console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: true })); // 'Approved';
// Test case 2: Stable income but poor credit score
console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: false })); // 'Rejected';
// Test case 3: No stable income
console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: true })); // 'Rejected';
// Test case 4: No stable income and poor credit score
console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: false })); // 'Rejected';
`
$3
`
typescript
const expressionTree = new BinaryTree(['+', 3, '*', null, null, 5, '-', null, null, 2, 8]); function evaluate(node?: BinaryTreeNode | null): number {
if (!node) return 0;
if (typeof node.key === 'number') return node.key;
const leftValue = evaluate(node.left); // Evaluate the left subtree
const rightValue = evaluate(node.right); // Evaluate the right subtree
// Perform the operation based on the current node's operator
switch (node.key) {
case '+':
return leftValue + rightValue;
case '-':
return leftValue - rightValue;
case '*':
return leftValue * rightValue;
case '/':
return rightValue !== 0 ? leftValue / rightValue : 0; // Handle division by zero
default:
throw new Error(
Unsupported operator: ${node.key}
);
}
} console.log(evaluate(expressionTree.root)); // -27;
``
[//]: # (No deletion!!! End of Example Replace Section)
API docs & Examples
API Docs
Live Examples
Examples Repository
Data Structures
Data Structure |
Unit Test |
Performance Test |
API Docs |
|---|
Binary Tree |
 |
 |
Binary Tree |
Standard library data structure comparison
Data Structure Typed |
C++ STL |
java.util |
Python collections |
|---|
BinaryTree<K, V> |
- |
- |
- |
Benchmark
[//]: # (No deletion!!! Start of Replace Section)
binary-tree
| test name | time taken (ms) | executions per sec | sample deviation |
|---|
| 1,000 add randomly | 12.35 | 80.99 | 7.17e-5 |
| 1,000 add & delete randomly | 15.98 | 62.58 | 7.98e-4 |
| 1,000 addMany | 10.96 | 91.27 | 0.00 |
| 1,000 get | 18.61 | 53.73 | 0.00 |
| 1,000 dfs | 164.20 | 6.09 | 0.04 |
| 1,000 bfs | 58.84 | 17.00 | 0.01 |
| 1,000 morris | 256.66 | 3.90 | 7.70e-4 |
[//]: # (No deletion!!! End of Replace Section)
Built-in classic algorithms
Algorithm |
Function Description |
Iteration Type |
|---|
Binary Tree DFS |
Traverse a binary tree in a depth-first manner, starting from the root node, first visiting the left subtree, and then the right subtree, using recursion. |
Recursion + Iteration |
Binary Tree BFS |
Traverse a binary tree in a breadth-first manner, starting from the root node, visiting nodes level by level from left to right. |
Iteration |
Binary Tree Morris |
Morris traversal is an in-order traversal algorithm for binary trees with O(1) space complexity. It allows tree traversal without additional stack or recursion. |
Iteration |
Software Engineering Design Standards
Principle |
Description |
|---|
Practicality |
Follows ES6 and ESNext standards, offering unified and considerate optional parameters, and simplifies method names. |
Extensibility |
Adheres to OOP (Object-Oriented Programming) principles, allowing inheritance for all data structures. |
Modularization |
Includes data structure modularization and independent NPM packages. |
Efficiency |
All methods provide time and space complexity, comparable to native JS performance. |
Maintainability |
Follows open-source community development standards, complete documentation, continuous integration, and adheres to TDD (Test-Driven Development) patterns. |
Testability |
Automated and customized unit testing, performance testing, and integration testing. |
Portability |
Plans for porting to Java, Python, and C++, currently achieved to 80%. |
Reusability |
Fully decoupled, minimized side effects, and adheres to OOP. |
Security |
Carefully designed security for member variables and methods. Read-write separation. Data structure software does not need to consider other security aspects. |
Scalability |
Data structure software does not involve load issues. |