Javascript Data Structure Tree Red Black Tree
function RedBlackTree() { var Colors = { RED: 0,//from w ww .j a v a 2 s.co m BLACK: 1 }; var Node = function (key, color) { this.key = key; this.left = null; this.right = null; this.color = color; this.flipColor = function(){ if (this.color === Colors.RED) { this.color = Colors.BLACK; } else { this.color = Colors.RED; } }; }; var root = null; this.getRoot = function () { return root; }; var isRed = function(node){ if (!node){ return false; } return node.color === Colors.RED; }; var flipColors = function(node){ node.left.flipColor(); node.right.flipColor(); }; var rotateLeft = function(node){ var temp = node.right; if (temp !== null) { node.right = temp.left; temp.left = node; temp.color = node.color; node.color = Colors.RED; } return temp; }; var rotateRight = function (node) { var temp = node.left; if (temp !== null) { node.left = temp.right; temp.right = node; temp.color = node.color; node.color = Colors.RED; } return temp; }; var insertNode = function(node, element) { if (node === null) { return new Node(element, Colors.RED); } var newRoot = node; if (element < node.key) { node.left = insertNode(node.left, element); } else if (element > node.key) { node.right = insertNode(node.right, element); } else { node.key = element; } if (isRed(node.right) && !isRed(node.left)) { newRoot = rotateLeft(node); } if (isRed(node.left) && isRed(node.left.left)) { newRoot = rotateRight(node); } if (isRed(node.left) && isRed(node.right)) { flipColors(node); } return newRoot; }; this.insert = function(element) { root = insertNode(root, element); root.color = Colors.BLACK; }; } var rbTree = new RedBlackTree(); rbTree.insert(1); rbTree.insert(2); rbTree.insert(3); rbTree.insert(4); rbTree.insert(5); rbTree.insert(6); rbTree.insert(7); rbTree.insert(14); rbTree.insert(15); rbTree.insert(13); rbTree.insert(12); rbTree.insert(11); console.log('********* raw data structure ***********'); console.log(rbTree.getRoot());