TreeNode.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. "use strict";
  2. Object.defineProperty(exports, "t", {
  3. value: true
  4. });
  5. exports.TreeNodeEnableIndex = exports.TreeNode = void 0;
  6. class TreeNode {
  7. constructor(e, t) {
  8. this.se = 1;
  9. this.T = undefined;
  10. this.L = undefined;
  11. this.U = undefined;
  12. this.J = undefined;
  13. this.tt = undefined;
  14. this.T = e;
  15. this.L = t;
  16. }
  17. pre() {
  18. let e = this;
  19. if (e.se === 1 && e.tt.tt === e) {
  20. e = e.J;
  21. } else if (e.U) {
  22. e = e.U;
  23. while (e.J) {
  24. e = e.J;
  25. }
  26. } else {
  27. let t = e.tt;
  28. while (t.U === e) {
  29. e = t;
  30. t = e.tt;
  31. }
  32. e = t;
  33. }
  34. return e;
  35. }
  36. next() {
  37. let e = this;
  38. if (e.J) {
  39. e = e.J;
  40. while (e.U) {
  41. e = e.U;
  42. }
  43. return e;
  44. } else {
  45. let t = e.tt;
  46. while (t.J === e) {
  47. e = t;
  48. t = e.tt;
  49. }
  50. if (e.J !== t) {
  51. return t;
  52. } else return e;
  53. }
  54. }
  55. rotateLeft() {
  56. const e = this.tt;
  57. const t = this.J;
  58. const s = t.U;
  59. if (e.tt === this) e.tt = t; else if (e.U === this) e.U = t; else e.J = t;
  60. t.tt = e;
  61. t.U = this;
  62. this.tt = t;
  63. this.J = s;
  64. if (s) s.tt = this;
  65. return t;
  66. }
  67. rotateRight() {
  68. const e = this.tt;
  69. const t = this.U;
  70. const s = t.J;
  71. if (e.tt === this) e.tt = t; else if (e.U === this) e.U = t; else e.J = t;
  72. t.tt = e;
  73. t.J = this;
  74. this.tt = t;
  75. this.U = s;
  76. if (s) s.tt = this;
  77. return t;
  78. }
  79. }
  80. exports.TreeNode = TreeNode;
  81. class TreeNodeEnableIndex extends TreeNode {
  82. constructor() {
  83. super(...arguments);
  84. this.U = undefined;
  85. this.J = undefined;
  86. this.tt = undefined;
  87. this.et = 1;
  88. }
  89. rotateLeft() {
  90. const e = super.rotateLeft();
  91. this.recount();
  92. e.recount();
  93. return e;
  94. }
  95. rotateRight() {
  96. const e = super.rotateRight();
  97. this.recount();
  98. e.recount();
  99. return e;
  100. }
  101. recount() {
  102. this.et = 1;
  103. if (this.U) this.et += this.U.et;
  104. if (this.J) this.et += this.J.et;
  105. }
  106. }
  107. exports.TreeNodeEnableIndex = TreeNodeEnableIndex;