Binary Tree. Javascript & Typescript Data Structure.
Package Exports
binary-tree-typed
binary-tree-typed/legacy
binary-tree-typed/modern
Readme
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
npm
npm i binary-tree-typed --save
yarn
yarnadd binary-tree-typed
snippet
basic BinaryTree creation and insertion
// Create a BinaryTree with entriesconst entries:[number,string][]=[[6,'six'],[1,'one'],[2,'two'],[7,'seven'],[5,'five'],[3,'three'],[4,'four'],[9,'nine'],[8,'eight']];const tree =newBinaryTree(entries);// Verify sizeconsole.log(tree.size);// 9;// Add new element
tree.add(10,'ten');console.log(tree.size);// 10;
BinaryTree get and has operations
const tree =newBinaryTree([[5,'five'],[3,'three'],[7,'seven'],[1,'one'],[4,'four'],[6,'six'],[8,'eight']],{ isMapMode:false});// Check if key existsconsole.log(tree.has(5));// true;console.log(tree.has(10));// false;// Get value by keyconsole.log(tree.get(3));// 'three';console.log(tree.get(7));// 'seven';console.log(tree.get(100));// undefined;// Get node structureconst node = tree.getNode(5);console.log(node?.key);// 5;console.log(node?.value);// 'five';
BinaryTree level-order traversal
const tree =newBinaryTree([[1,'one'],[2,'two'],[3,'three'],[4,'four'],[5,'five'],[6,'six'],[7,'seven']]);// Binary tree maintains level-order insertion// Complete binary tree structureconsole.log(tree.size);// 7;// Verify all keys are presentconsole.log(tree.has(1));// true;console.log(tree.has(4));// true;console.log(tree.has(7));// true;// Iterate through treeconst keys:number[]=[];for(const[key]of tree){
keys.push(key);}console.log(keys.length);// 7;
determine loan approval using a decision tree
// Decision tree structureconst loanDecisionTree =newBinaryTree<string>(['stableIncome','goodCredit','Rejected','Approved','Rejected'],{ isDuplicate:true});functiondetermineLoanApproval(
node?: BinaryTreeNode<string>|null,
conditions?:{[key:string]:boolean}):string{if(!node)thrownewError('Invalid node');// If it's a leaf node, return the decision resultif(!node.left &&!node.right)return node.key;// Check if a valid condition exists for the current node's keyreturn conditions?.[node.key]?determineLoanApproval(node.left, conditions):determineLoanApproval(node.right, conditions);}// Test case 1: Stable income and good credit scoreconsole.log(determineLoanApproval(loanDecisionTree.root,{ stableIncome:true, goodCredit:true}));// 'Approved';// Test case 2: Stable income but poor credit scoreconsole.log(determineLoanApproval(loanDecisionTree.root,{ stableIncome:true, goodCredit:false}));// 'Rejected';// Test case 3: No stable incomeconsole.log(determineLoanApproval(loanDecisionTree.root,{ stableIncome:false, goodCredit:true}));// 'Rejected';// Test case 4: No stable income and poor credit scoreconsole.log(determineLoanApproval(loanDecisionTree.root,{ stableIncome:false, goodCredit:false}));// 'Rejected';
evaluate the arithmetic expression represented by the binary tree
const expressionTree =newBinaryTree<number|string>(['+',3,'*',null,null,5,'-',null,null,2,8]);functionevaluate(node?: BinaryTreeNode<number|string>|null):number{if(!node)return0;if(typeof node.key ==='number')return node.key;const leftValue =evaluate(node.left);// Evaluate the left subtreeconst rightValue =evaluate(node.right);// Evaluate the right subtree// Perform the operation based on the current node's operatorswitch(node.key){case'+':return leftValue + rightValue;case'-':return leftValue - rightValue;case'*':return leftValue * rightValue;case'/':return rightValue !==0? leftValue / rightValue :0;// Handle division by zerodefault:thrownewError(`Unsupported operator: ${node.key}`);}}console.log(evaluate(expressionTree.root));// -27;
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.