Skip to content

Instantly share code, notes, and snippets.

@sabha
Created July 17, 2018 21:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sabha/09399a4f60bb835a362f09ac65842f28 to your computer and use it in GitHub Desktop.
Save sabha/09399a4f60bb835a362f09ac65842f28 to your computer and use it in GitHub Desktop.
Binary Tree
<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="600" height="600" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.font = "18px serif";
ctx.textBaseline = "middle";
ctx.textAlign = "center";
var width = c.width;
var height = c.height;
var cx = width/2;
var cy = height/2;
function text(txt,x,y){
var str = txt.toString();
ctx.fillText(str.split("").join(String.fromCharCode(8202)),x,y);
}
function circleWithText(x,y){
ctx.beginPath();
ctx.arc(x,y,30,0,2*Math.PI);
ctx.stroke();
return function(txt){
text(txt, x,y);
}
}
//circleWithText(cx,100)("10");
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return JSON.stringify(obj) === JSON.stringify({});
}
var a = [10,3,15,5,7,24,6,12,9];
function Node(_value, _rootNode = false){
this.left = {};
this.right = {};
this.value = _value;
this.rootNode = _rootNode;
}
function Tree(){
this.rootNode;
}
Tree.prototype.addRootNode = function(node) {
var value = node.value;
if(this.rootNode && this.rootNode.value === value ) {
console.log('Duplicate Root Node => ', value);
return;
}
if(this.rootNode === undefined){
var root = new Node(value, true);
console.log('Root Node added => ',value);
this.rootNode = root;
}
}
Tree.prototype.addNode = function(node, _selectedNode) {
var value = node.value;
var selectedNode = _selectedNode;
if(_selectedNode === undefined) {
selectedNode = this.rootNode;
}
if(selectedNode && selectedNode.value === value ) {
console.log('Duplicate Child Node => ', value);
return;
}
if(value < selectedNode.value) {
if(isEmpty(selectedNode.left)){
console.log('Added Children node to LEFT => ',value);
selectedNode.left = node;
} else{
this.addNode(node, selectedNode.left);
}
}
if(value > selectedNode.value) {
if(isEmpty(selectedNode.right)){
console.log('Added Children node to RIGHT => ',value);
selectedNode.right = node;
} else {
this.addNode(node, selectedNode.right);
}
}
};
Tree.prototype.traverse = function(node, _selectedNode) {
}
var tree = new Tree();
tree.addRootNode(new Node(20));
tree.addNode(new Node(200));
tree.addNode(new Node(200));
tree.addNode(new Node(2));
tree.addNode(new Node(201));
tree.addNode(new Node(10));
tree.addNode(new Node(10));
tree.traverse();
console.log(tree)
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment