class Node {
constructor(data) {
this.data = data;
this.left = null;
this.right = null;
}
}
class BinaryTree {
constructor() {
this.root = null;
}
insert(data) {
const newNode = new Node(data);
if(this.root === null) {
this.root = newNode;
} else {
this.insertNode(this.root,newNode)
}
}
insertNode(node, newNode) {
if(newNode.data < node.data) {
if(node.left === null) {
node.left = newNode
} else {
this.insertNode(node.left,newNode)
}
} else {
if(node.right === null) {
node.right = newNode;
} else {
this.insertNode(node.right,newNode);
}
}
}
preOrderTraversal(node) {
if(node !== null) {
console.log(node.data);
this.preOrderTraversal(node.left);
this.preOrderTraversal(node.right)
}
}
inOrderTraversal(node) {
if(node !== null) {
this.inOrderTraversal(node.left);
console.log(node.data);
this.inOrderTraversal(node.right)
}
}
postOrderTraversal(node) {
if(node !== null) {
this.postOrderTraversal(node.left);
this.postOrderTraversal(node.right);
console.log(node.data)
}
}
search(data) {
return this.searchNode(this.root,data)
}
searchNode(node,data) {
if(node === null) return null;
if(data<node.data) {
return this.searchNode(node.left,data)
} else if (data>node.data) {
return this.searchNode(node.right,data)
} else {
return node;
}
}
}
const tree = new BinaryTree();
tree.insert(15);
tree.insert(25);
tree.insert(10);
tree.insert(5);
tree.insert(20);
tree.insert(30)
console.log("Pre-order Traversal:");
tree.preOrderTraversal(tree.root)
console.log("In-order Traversal:");
tree.inOrderTraversal(tree.root);
console.log("Post-order Traversal");
tree.postOrderTraversal(tree.root);
const node = tree.search(25);
console.log(node ? node.data : 'Not found')
console