Advertisement
Guest User

Untitled

a guest
Aug 4th, 2015
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. function Trie() {
  2. this.head = {
  3. key : ''
  4. , children: {}
  5. }
  6. }
  7.  
  8. Trie.prototype.add = function(key) {
  9.  
  10. var curNode = this.head
  11. , newNode = null
  12. , curChar = key.slice(0,1);
  13.  
  14. key = key.slice(1);
  15.  
  16. while(typeof curNode.children[curChar] !== "undefined"
  17. && curChar.length > 0){
  18. curNode = curNode.children[curChar];
  19. curChar = key.slice(0,1);
  20. key = key.slice(1);
  21. }
  22.  
  23. while(curChar.length > 0) {
  24. newNode = {
  25. key : curChar
  26. , value : key.length === 0 ? null : undefined
  27. , children : {}
  28. };
  29.  
  30. curNode.children[curChar] = newNode;
  31.  
  32. curNode = newNode;
  33.  
  34. curChar = key.slice(0,1);
  35. key = key.slice(1);
  36. }
  37.  
  38. };
  39.  
  40. Trie.prototype.search = function(key) {
  41. var curNode = this.head
  42. , curChar = key.slice(0,1)
  43. , d = 0;
  44.  
  45. key = key.slice(1);
  46.  
  47. while(typeof curNode.children[curChar] !== "undefined" && curChar.length > 0){
  48. curNode = curNode.children[curChar];
  49. curChar = key.slice(0,1);
  50. key = key.slice(1);
  51. d += 1;
  52. }
  53.  
  54. if (curNode.value === null && key.length === 0) {
  55. return d;
  56. } else {
  57. return -1;
  58. }
  59.  
  60. }
  61.  
  62. Trie.prototype.remove = function(key) {
  63. var d = this.search(key);
  64. if (d > -1){
  65. removeH(this.head, key, d);
  66. }
  67. }
  68.  
  69. function removeH(node, key, depth) {
  70. if (depth === 0 && Object.keys(node.children).length === 0){
  71. return true;
  72. }
  73.  
  74. var curChar = key.slice(0,1);
  75.  
  76. if (removeH(node.children[curChar], key.slice(1), depth-1)) {
  77. delete node.children[curChar];
  78. if (Object.keys(node.children).length === 0) {
  79. return true;
  80. } else {
  81. return false;
  82. }
  83. } else {
  84. return false;
  85. }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement