1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| const BinarySearchTree= () => { const Node = (key) => { this.key = key; this.left = null; this.right = null; }; let root = null; const insertNode = (node, newNode) => { if(newNode.key < node.key){ if(node.left === null){ node.left = newNode; } else { insertNode(node.left, newNode); } } else { if(node.right === null){ node.right = newNode; } else { insertNode(node.right, newNode); } } } this.insert = (key) => { let newNode = new Node(key); if(root === null){ root = newNode; } else { insertNode(root, newNode); } }; const preOrderTraverseNode = (node, callback) => { if(node !== null){ callback(node.key); preOrderTraverseNode(node.left, callback); preOrderTraverseNode(node.right, callback); } } this.preOrderTraverse = (callback) => { preOrderTraverseNode(root, callback); }; var inOrderTraverseNode = (node, callback) => { if(node !== null){ inOrderTraverseNode(node.left, callback); callback(node.key); inOrderTraverseNode(node.right, callback); } } this.inOrderTraverse = (callback) => { inOrderTraverseNode(root, callback); }; var postOrderTraverseNode = (node, callback) => { if(node !== null){ postOrderTraverseNode(node.left, callback); postOrderTraverseNode(node.right, callback); callback(node.key); } } this.postOrderTraverse = (callback) => { postOrderTraverseNode(root, callback); }; this.min = () => { return minNode(root); } const minNode = (node) => { if(node){ while(node && node.left !== null){ node = node.left; } return node.key } return null; }; this.max = function () { return maxNode(root); } const maxNode = (node) => { if(node){ while(node && node.right !== null){ node = node.right; } return node.key; } return null; }; this.search = (key) => { return searchNode(root, key); }; const searchNode = (node, key) => { if(node === null){ return false; } if(key < node.key){ return searchNode(node.left, key) } else if(key > node.key){ return searchNode(node.left, key) } else { return true; } } } const printNode = (value) => { console.log(value); }
|