Quick actions

cmd+k|ctrl+k

Navigation

Languages

BinaryTree in JavaScript

Snippet info

Language

JavaScript

Visibility

public

Author

patrykstachowiak

Created

2025-03-08T12:17:36.057433Z

Updated

2025-03-08T12:51:59.065364Z

class Node {
  constructor(value) {
    this.left = null;
    this.right = null;
    this.value = value;
  }
}

class BinarySearchTree {
  constructor() {
    this.root = null;
  }
  insert(value) {
      const newNode = new Node(value);
    if (this.root === null) {
        this.root = newNode;
        return this;
    }
    
    let parent = this.root;
    while(true) {
        if (parent.value > value) {
            // Left
            if (parent.left !== null) {
                parent = parent.left;
            } else {
                parent.left = newNode;
                return this;
            }
        } else {
            // Right
            if (parent.right !== null) {
                parent = parent.right;
            } else {
                parent.right = newNode;
                return this;
            }
        }
    }
  }
  
  lookup(value) {
    let currentNode = this.root;
    
    while(currentNode !== null) {
        if (currentNode.value === value) {
            return currentNode;
        }
        
        if (currentNode.value > value) {
            currentNode = currentNode.left;
        } else {
            currentNode = currentNode.right;
        }
    }
    
    console.log("Not found " + value);
    return this;
  }
 
  remove(value) {
    
  }
}

const tree = new BinarySearchTree();
tree.insert(9);
tree.insert(4);
tree.insert(6);
tree.insert(20);
tree.insert(170);
tree.insert(15);
tree.insert(1);
console.log("Found " + tree.lookup(15).value);
console.log(tree);


JSON.stringify(traverse(tree.root));
console.log(tree.lookup(20));
//     9
//  4     20
//1  6  15  170

function traverse(node) {
  const tree = { value: node.value };
  tree.left = node.left === null ? null : traverse(node.left);
  tree.right = node.right === null ? null : traverse(node.right);
  return tree;
}
INFO