index.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. "use strict";
  2. Object.defineProperty(exports, "t", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _ContainerBase = require("../../ContainerBase");
  7. var _TreeNode = require("./TreeNode");
  8. class TreeContainer extends _ContainerBase.Container {
  9. constructor(e = ((e, t) => {
  10. if (e < t) return -1;
  11. if (e > t) return 1;
  12. return 0;
  13. }), t = false) {
  14. super();
  15. this.X = undefined;
  16. this.ie = (e, t) => {
  17. if (e === undefined) return false;
  18. const i = this.ie(e.U, t);
  19. if (i) return true;
  20. if (t(e)) return true;
  21. return this.ie(e.J, t);
  22. };
  23. this.p = e;
  24. if (t) {
  25. this.ne = _TreeNode.TreeNodeEnableIndex;
  26. this.ee = function(e, t, i) {
  27. const s = this.he(e, t, i);
  28. if (s) {
  29. let e = s.tt;
  30. while (e !== this.S) {
  31. e.et += 1;
  32. e = e.tt;
  33. }
  34. const t = this.fe(s);
  35. if (t) {
  36. const {parentNode: e, grandParent: i, curNode: s} = t;
  37. e.recount();
  38. i.recount();
  39. s.recount();
  40. }
  41. }
  42. };
  43. this.ue = function(e) {
  44. let t = this.le(e);
  45. while (t !== this.S) {
  46. t.et -= 1;
  47. t = t.tt;
  48. }
  49. };
  50. } else {
  51. this.ne = _TreeNode.TreeNode;
  52. this.ee = function(e, t, i) {
  53. const s = this.he(e, t, i);
  54. if (s) this.fe(s);
  55. };
  56. this.ue = this.le;
  57. }
  58. this.S = new this.ne;
  59. }
  60. W(e, t) {
  61. let i;
  62. while (e) {
  63. const s = this.p(e.T, t);
  64. if (s < 0) {
  65. e = e.J;
  66. } else if (s > 0) {
  67. i = e;
  68. e = e.U;
  69. } else return e;
  70. }
  71. return i === undefined ? this.S : i;
  72. }
  73. Y(e, t) {
  74. let i;
  75. while (e) {
  76. const s = this.p(e.T, t);
  77. if (s <= 0) {
  78. e = e.J;
  79. } else {
  80. i = e;
  81. e = e.U;
  82. }
  83. }
  84. return i === undefined ? this.S : i;
  85. }
  86. Z(e, t) {
  87. let i;
  88. while (e) {
  89. const s = this.p(e.T, t);
  90. if (s < 0) {
  91. i = e;
  92. e = e.J;
  93. } else if (s > 0) {
  94. e = e.U;
  95. } else return e;
  96. }
  97. return i === undefined ? this.S : i;
  98. }
  99. $(e, t) {
  100. let i;
  101. while (e) {
  102. const s = this.p(e.T, t);
  103. if (s < 0) {
  104. i = e;
  105. e = e.J;
  106. } else {
  107. e = e.U;
  108. }
  109. }
  110. return i === undefined ? this.S : i;
  111. }
  112. oe(e) {
  113. while (true) {
  114. const t = e.tt;
  115. if (t === this.S) return;
  116. if (e.se === 1) {
  117. e.se = 0;
  118. return;
  119. }
  120. if (e === t.U) {
  121. const i = t.J;
  122. if (i.se === 1) {
  123. i.se = 0;
  124. t.se = 1;
  125. if (t === this.X) {
  126. this.X = t.rotateLeft();
  127. } else t.rotateLeft();
  128. } else {
  129. if (i.J && i.J.se === 1) {
  130. i.se = t.se;
  131. t.se = 0;
  132. i.J.se = 0;
  133. if (t === this.X) {
  134. this.X = t.rotateLeft();
  135. } else t.rotateLeft();
  136. return;
  137. } else if (i.U && i.U.se === 1) {
  138. i.se = 1;
  139. i.U.se = 0;
  140. i.rotateRight();
  141. } else {
  142. i.se = 1;
  143. e = t;
  144. }
  145. }
  146. } else {
  147. const i = t.U;
  148. if (i.se === 1) {
  149. i.se = 0;
  150. t.se = 1;
  151. if (t === this.X) {
  152. this.X = t.rotateRight();
  153. } else t.rotateRight();
  154. } else {
  155. if (i.U && i.U.se === 1) {
  156. i.se = t.se;
  157. t.se = 0;
  158. i.U.se = 0;
  159. if (t === this.X) {
  160. this.X = t.rotateRight();
  161. } else t.rotateRight();
  162. return;
  163. } else if (i.J && i.J.se === 1) {
  164. i.se = 1;
  165. i.J.se = 0;
  166. i.rotateLeft();
  167. } else {
  168. i.se = 1;
  169. e = t;
  170. }
  171. }
  172. }
  173. }
  174. }
  175. le(e) {
  176. if (this.o === 1) {
  177. this.clear();
  178. return this.S;
  179. }
  180. let t = e;
  181. while (t.U || t.J) {
  182. if (t.J) {
  183. t = t.J;
  184. while (t.U) t = t.U;
  185. } else {
  186. t = t.U;
  187. }
  188. [e.T, t.T] = [ t.T, e.T ];
  189. [e.L, t.L] = [ t.L, e.L ];
  190. e = t;
  191. }
  192. if (this.S.U === t) {
  193. this.S.U = t.tt;
  194. } else if (this.S.J === t) {
  195. this.S.J = t.tt;
  196. }
  197. this.oe(t);
  198. const i = t.tt;
  199. if (t === i.U) {
  200. i.U = undefined;
  201. } else i.J = undefined;
  202. this.o -= 1;
  203. this.X.se = 0;
  204. return i;
  205. }
  206. fe(e) {
  207. while (true) {
  208. const t = e.tt;
  209. if (t.se === 0) return;
  210. const i = t.tt;
  211. if (t === i.U) {
  212. const s = i.J;
  213. if (s && s.se === 1) {
  214. s.se = t.se = 0;
  215. if (i === this.X) return;
  216. i.se = 1;
  217. e = i;
  218. continue;
  219. } else if (e === t.J) {
  220. e.se = 0;
  221. if (e.U) e.U.tt = t;
  222. if (e.J) e.J.tt = i;
  223. t.J = e.U;
  224. i.U = e.J;
  225. e.U = t;
  226. e.J = i;
  227. if (i === this.X) {
  228. this.X = e;
  229. this.S.tt = e;
  230. } else {
  231. const t = i.tt;
  232. if (t.U === i) {
  233. t.U = e;
  234. } else t.J = e;
  235. }
  236. e.tt = i.tt;
  237. t.tt = e;
  238. i.tt = e;
  239. i.se = 1;
  240. return {
  241. parentNode: t,
  242. grandParent: i,
  243. curNode: e
  244. };
  245. } else {
  246. t.se = 0;
  247. if (i === this.X) {
  248. this.X = i.rotateRight();
  249. } else i.rotateRight();
  250. i.se = 1;
  251. }
  252. } else {
  253. const s = i.U;
  254. if (s && s.se === 1) {
  255. s.se = t.se = 0;
  256. if (i === this.X) return;
  257. i.se = 1;
  258. e = i;
  259. continue;
  260. } else if (e === t.U) {
  261. e.se = 0;
  262. if (e.U) e.U.tt = i;
  263. if (e.J) e.J.tt = t;
  264. i.J = e.U;
  265. t.U = e.J;
  266. e.U = i;
  267. e.J = t;
  268. if (i === this.X) {
  269. this.X = e;
  270. this.S.tt = e;
  271. } else {
  272. const t = i.tt;
  273. if (t.U === i) {
  274. t.U = e;
  275. } else t.J = e;
  276. }
  277. e.tt = i.tt;
  278. t.tt = e;
  279. i.tt = e;
  280. i.se = 1;
  281. return {
  282. parentNode: t,
  283. grandParent: i,
  284. curNode: e
  285. };
  286. } else {
  287. t.se = 0;
  288. if (i === this.X) {
  289. this.X = i.rotateLeft();
  290. } else i.rotateLeft();
  291. i.se = 1;
  292. }
  293. }
  294. return;
  295. }
  296. }
  297. he(e, t, i) {
  298. if (this.X === undefined) {
  299. this.o += 1;
  300. this.X = new this.ne(e, t);
  301. this.X.se = 0;
  302. this.X.tt = this.S;
  303. this.S.tt = this.X;
  304. this.S.U = this.X;
  305. this.S.J = this.X;
  306. return;
  307. }
  308. let s;
  309. const r = this.S.U;
  310. const n = this.p(r.T, e);
  311. if (n === 0) {
  312. r.L = t;
  313. return;
  314. } else if (n > 0) {
  315. r.U = new this.ne(e, t);
  316. r.U.tt = r;
  317. s = r.U;
  318. this.S.U = s;
  319. } else {
  320. const r = this.S.J;
  321. const n = this.p(r.T, e);
  322. if (n === 0) {
  323. r.L = t;
  324. return;
  325. } else if (n < 0) {
  326. r.J = new this.ne(e, t);
  327. r.J.tt = r;
  328. s = r.J;
  329. this.S.J = s;
  330. } else {
  331. if (i !== undefined) {
  332. const r = i.I;
  333. if (r !== this.S) {
  334. const i = this.p(r.T, e);
  335. if (i === 0) {
  336. r.L = t;
  337. return;
  338. } else if (i > 0) {
  339. const i = r.pre();
  340. const n = this.p(i.T, e);
  341. if (n === 0) {
  342. i.L = t;
  343. return;
  344. } else if (n < 0) {
  345. s = new this.ne(e, t);
  346. if (i.J === undefined) {
  347. i.J = s;
  348. s.tt = i;
  349. } else {
  350. r.U = s;
  351. s.tt = r;
  352. }
  353. }
  354. }
  355. }
  356. }
  357. if (s === undefined) {
  358. s = this.X;
  359. while (true) {
  360. const i = this.p(s.T, e);
  361. if (i > 0) {
  362. if (s.U === undefined) {
  363. s.U = new this.ne(e, t);
  364. s.U.tt = s;
  365. s = s.U;
  366. break;
  367. }
  368. s = s.U;
  369. } else if (i < 0) {
  370. if (s.J === undefined) {
  371. s.J = new this.ne(e, t);
  372. s.J.tt = s;
  373. s = s.J;
  374. break;
  375. }
  376. s = s.J;
  377. } else {
  378. s.L = t;
  379. return;
  380. }
  381. }
  382. }
  383. }
  384. }
  385. this.o += 1;
  386. return s;
  387. }
  388. clear() {
  389. this.o = 0;
  390. this.X = undefined;
  391. this.S.tt = undefined;
  392. this.S.U = this.S.J = undefined;
  393. }
  394. updateKeyByIterator(e, t) {
  395. const i = e.I;
  396. if (i === this.S) {
  397. throw new TypeError("Invalid iterator!");
  398. }
  399. if (this.o === 1) {
  400. i.T = t;
  401. return true;
  402. }
  403. if (i === this.S.U) {
  404. if (this.p(i.next().T, t) > 0) {
  405. i.T = t;
  406. return true;
  407. }
  408. return false;
  409. }
  410. if (i === this.S.J) {
  411. if (this.p(i.pre().T, t) < 0) {
  412. i.T = t;
  413. return true;
  414. }
  415. return false;
  416. }
  417. const s = i.pre().T;
  418. if (this.p(s, t) >= 0) return false;
  419. const r = i.next().T;
  420. if (this.p(r, t) <= 0) return false;
  421. i.T = t;
  422. return true;
  423. }
  424. eraseElementByPos(e) {
  425. if (e < 0 || e > this.o - 1) {
  426. throw new RangeError;
  427. }
  428. let t = 0;
  429. this.ie(this.X, (i => {
  430. if (e === t) {
  431. this.ue(i);
  432. return true;
  433. }
  434. t += 1;
  435. return false;
  436. }));
  437. }
  438. re(e, t) {
  439. while (e) {
  440. const i = this.p(e.T, t);
  441. if (i < 0) {
  442. e = e.J;
  443. } else if (i > 0) {
  444. e = e.U;
  445. } else return e;
  446. }
  447. return e;
  448. }
  449. eraseElementByKey(e) {
  450. if (!this.o) return;
  451. const t = this.re(this.X, e);
  452. if (t === undefined) return;
  453. this.ue(t);
  454. }
  455. eraseElementByIterator(e) {
  456. const t = e.I;
  457. if (t === this.S) {
  458. throw new RangeError("Invalid iterator");
  459. }
  460. if (t.J === undefined) {
  461. e = e.next();
  462. }
  463. this.ue(t);
  464. return e;
  465. }
  466. getHeight() {
  467. if (!this.o) return 0;
  468. const traversal = e => {
  469. if (!e) return 0;
  470. return Math.max(traversal(e.U), traversal(e.J)) + 1;
  471. };
  472. return traversal(this.X);
  473. }
  474. }
  475. var _default = TreeContainer;
  476. exports.default = _default;