3 \documentclass[12pt]{article}
4 \usepackage{elemfig,amsmath}
6 \newcommand{\xlab}[1]{\mlabel{\textsc{#1}}}
10 data[0] = btex \xlab{a} etex; data[1] = btex \xlab{b} etex; data[2] = btex \xlab{c} etex;
11 data[3] = btex \xlab{d} etex; data[4] = btex \xlab{e} etex; data[5] = btex \xlab{f} etex;
12 data[6] = btex \xlab{g} etex; data[7] = btex \xlab{h} etex; data[8] = btex \xlab{i} etex;
13 data[9] = btex \xlab{j} etex; data[10] = btex \xlab{k} etex; data[11] = btex \xlab{l} etex;
14 data[12] = btex \xlab{m} etex; data[13] = btex \xlab{n} etex; data[14] = btex \xlab{o} etex;
16 dotdata = btex \xlab{\dots\dots} etex;
18 pair min_reasonable_cell; min_reasonable_cell := (0,0);
20 min_reasonable_cell :=
21 (max(xpart min_reasonable_cell, xpart (urcorner data[_i_] - llcorner data[_i_])),
22 max(ypart min_reasonable_cell, ypart (urcorner data[_i_] - llcorner data[_i_])));
24 color deletedelement; deletedelement = .5white;
25 color upperlayer, upperlayerfill; upperlayer = (0,0,.5); upperlayerfill = (.9,.9,1);
27 picture emptyqueue; emptyqueue := btex \phantom{\elementlabel{Queue}} etex;
28 picture vemptyqueue; vemptyqueue := emptyqueue rotated 90 xscaled .4;
32 % tree with JKL removed
33 boxjoin(b.w - a.e = (20,0));
34 leafit.a(data[0], data[1], data[2]);
35 leafit.d(data[3], data[4], data[5]);
36 leafit.g(data[6], data[7], data[8]);
37 leafit.j(data[9], data[10], data[11]);
38 j.locked = j.deleted = true;
39 leafit.m(data[12], data[13], data[14]);
41 internalnodeit.ina(data[3], data[6], nullpicture);
42 internalnodeit.inj(data[12], nullpicture, nullpicture);
43 internalnodeit.root(data[9], nullpicture, nullpicture);
44 ina.s = .5[a.nw,g.ne] + (0,24);
45 inj.s = .5[j.nw,m.ne] + (0,24);
46 root.s = .5[ina.nw,inj.ne] + (0,24);
47 fixelement(a,d,g,j,m);
48 fixelement(root,ina,inj);
50 fill nodecellsbpath(j,0,2) withcolor deletedelement;
51 fill leafnextbpath(j) withcolor black;
52 g.nextpath = g.next .. (j.nw + (0,3)) .. tension 1.5 .. (j.ne + (0,3)) .. (m.nextin + (0,1));
53 j.prevpath = j.prev -- g.previn;
54 j.nextpath = j.next -- m.nextin;
55 m.prevpath = m.prev .. (j.se - (0,3)) .. tension 1.5 .. (j.sw - (0,3)) .. (g.previn - (0,1));
56 drawelement(a,d,g,j,m,ina,inj,root);
57 internalnodeconnect(ina,a,d,g);
58 internalnodeconnect(inj,j,m);
59 internalnodeconnect(root,ina,inj);
63 % bad idea: tree with M in internal node removed
64 boxjoin(b.w - a.e = (20,0));
65 leafit.a(data[0], data[1], data[2]);
66 leafit.d(data[3], data[4], data[5]);
67 leafit.g(data[6], data[7], data[8]);
68 leafit.j(data[9], data[10], data[11]);
70 leafit.m(data[12], data[13], data[14]);
72 internalnodeit.ina(data[3], data[6], nullpicture);
73 internalnodeit.inj(nullpicture, nullpicture, nullpicture);
75 internalnodeit.root(data[9], nullpicture, nullpicture);
76 ina.s = .5[a.nw,g.ne] + (0,24);
77 inj.s = .5[j.nw,m.ne] + (0,24);
78 root.s = .5[ina.nw,inj.ne] + (0,24);
79 fixelement(a,d,g,j,m);
80 fixelement(root,ina,inj);
82 fill nodecellsbpath(j,0,2) withcolor deletedelement;
83 fill leafnextbpath(j) withcolor black;
84 g.nextpath = g.next .. (j.nw + (0,3)) .. tension 1.5 .. (j.ne + (0,3)) .. (m.nextin + (0,1));
85 j.prevpath = j.prev -- g.previn;
86 j.nextpath = j.next -- m.nextin;
87 m.prevpath = m.prev .. (j.se - (0,3)) .. tension 1.5 .. (j.sw - (0,3)) .. (g.previn - (0,1));
88 drawelement(a,d,g,j,m,ina,inj,root);
89 internalnodeconnect(ina,a,d,g);
90 internalnodeconnect(inj,m);
91 internalnodeconnect(root,ina,inj);
92 label.rt(btex \textsf{\textbf{~~XXX}} etex, inj.e);
96 % tree with M stubbed out
97 boxjoin(b.w - a.e = (20,0));
98 leafit.a(data[0], data[1], data[2]);
99 leafit.d(data[3], data[4], data[5]);
100 leafit.g(data[6], data[7], data[8]);
101 leafit.j(data[9], data[10], data[11]);
103 leafit.m(data[12], data[13], data[14]);
105 internalnodeit.ina(data[3], data[6], nullpicture);
106 internalnodeit.inj(data[12], nullpicture, nullpicture);
108 internalnodeit.root(data[9], nullpicture, nullpicture);
109 ina.s = .5[a.nw,g.ne] + (0,24);
110 inj.s = .5[j.nw,m.ne] + (0,24);
111 root.s = .5[ina.nw,inj.ne] + (0,24);
112 fixelement(a,d,g,j,m);
113 fixelement(root,ina,inj);
115 fill nodecellsbpath(j,0,2) withcolor deletedelement;
116 fill leafnextbpath(j) withcolor black;
117 g.nextpath = g.next .. (j.nw + (0,3)) .. tension 1.5 .. (j.ne + (0,3)) .. (m.nextin + (0,1));
118 j.prevpath = j.prev -- g.previn;
119 j.nextpath = j.next -- m.nextin;
120 m.prevpath = m.prev .. (j.se - (0,3)) .. tension 1.5 .. (j.sw - (0,3)) .. (g.previn - (0,1));
121 drawelement(a,d,g,j,m,ina,inj,root);
122 internalnodeconnect(ina,a,d,g);
123 internalnodeconnectone(inj,m,1);
124 drawterminationarrow(inj.child[0] -- (inj.child[0] - (0,5)));
125 internalnodeconnect(root,ina,inj);
129 % tree with M replacing J at the root
130 boxjoin(b.w - a.e = (20,0));
131 leafit.a(data[0], data[1], data[2]);
132 leafit.d(data[3], data[4], data[5]);
133 leafit.g(data[6], data[7], data[8]);
134 leafit.j(data[9], data[10], data[11]);
136 leafit.m(data[12], data[13], data[14]);
138 internalnodeit.ina(data[3], data[6], nullpicture);
139 internalnodeit.inj(data[12], nullpicture, nullpicture);
140 internalnodeit.root(data[12], nullpicture, nullpicture);
142 ina.s = .5[a.nw,g.ne] + (0,24);
143 inj.s = .5[j.nw,m.ne] + (0,24);
144 root.s = .5[ina.nw,inj.ne] + (0,24);
145 fixelement(a,d,g,j,m);
146 fixelement(root,ina,inj);
148 fill nodecellsbpath(j,0,2) withcolor deletedelement;
149 fill leafnextbpath(j) withcolor black;
150 g.nextpath = g.next .. (j.nw + (0,3)) .. tension 1.5 .. (j.ne + (0,3)) .. (m.nextin + (0,1));
151 j.prevpath = j.prev -- g.previn;
152 j.nextpath = j.next -- m.nextin;
153 m.prevpath = m.prev .. (j.se - (0,3)) .. tension 1.5 .. (j.sw - (0,3)) .. (g.previn - (0,1));
154 drawelement(a,d,g,j,m,ina,inj,root);
155 internalnodeconnect(ina,a,d,g);
156 internalnodeconnectone(inj,m,1);
157 drawterminationarrow(inj.child[0] -- (inj.child[0] - (0,5)));
158 internalnodeconnect(root,ina,inj);
162 % tree with MNO removed
163 boxjoin(b.w - a.e = (20,0));
164 leafit.a(data[0], data[1], data[2]);
165 leafit.d(data[3], data[4], data[5]);
166 leafit.g(data[6], data[7], data[8]);
167 leafit.j(data[9], data[10], data[11]);
169 leafit.m(data[12], data[13], data[14]);
170 m.locked = m.deleted = true;
172 internalnodeit.ina(data[3], data[6], nullpicture);
173 internalnodeit.inj(data[12], nullpicture, nullpicture);
174 internalnodeit.root(data[12], nullpicture, nullpicture);
175 ina.s = .5[a.nw,g.ne] + (0,24);
176 inj.s = .5[j.nw,m.ne] + (0,24);
177 root.s = .5[ina.nw,inj.ne] + (0,24);
178 fixelement(a,d,g,j,m);
179 fixelement(root,ina,inj);
181 fill nodecellsbpath(m,0,2) withcolor deletedelement;
182 fill leafnextbpath(m) withcolor black;
183 m.prevpath = m.prev -- g.previn;
184 drawelement(a,d,g,m,ina,inj,root);
185 internalnodeconnect(ina,a,d,g);
186 internalnodeconnectone(inj,m,1);
187 drawterminationarrow(inj.child[0] -- (inj.child[0] - (0,5)));
188 internalnodeconnect(root,ina,inj);
192 % tree with MNO removed and internal node removed
193 boxjoin(b.w - a.e = (20,0));
194 leafit.a(data[0], data[1], data[2]);
195 leafit.d(data[3], data[4], data[5]);
196 leafit.g(data[6], data[7], data[8]);
197 leafit.j(data[9], data[10], data[11]);
199 leafit.m(data[12], data[13], data[14]);
202 internalnodeit.ina(data[3], data[6], nullpicture);
203 internalnodeit.inj(nullpicture, nullpicture, nullpicture);
204 inj.locked = inj.deleted = true;
205 internalnodeit.root(data[12], nullpicture, nullpicture);
206 ina.s = .5[a.nw,g.ne] + (0,24);
207 inj.s = .5[j.nw,m.ne] + (0,24);
208 root.s = .5[ina.nw,inj.ne] + (0,24);
209 fixelement(a,d,g,j,m);
210 fixelement(root,ina,inj);
212 fill nodecellsbpath(m,0,2) withcolor deletedelement;
213 fill leafnextbpath(m) withcolor black;
214 m.prevpath = m.prev -- g.previn;
215 drawelement(a,d,g,m,ina,inj,root);
216 internalnodeconnect(ina,a,d,g);
217 drawterminationarrow(inj.child[0] -- (inj.child[0] - (0,5)));
218 internalnodeconnect(root,ina,inj);
222 % tree with MNO removed and internal node removed
223 boxjoin(b.w - a.e = (20,0));
224 leafit.a(data[0], data[1], data[2]);
225 leafit.d(data[3], data[4], data[5]);
226 leafit.g(data[6], data[7], data[8]);
227 leafit.j(data[9], data[10], data[11]);
229 leafit.m(data[12], data[13], data[14]);
232 internalnodeit.ina(data[3], data[6], nullpicture);
233 internalnodeit.inj(nullpicture, nullpicture, nullpicture);
235 internalnodeit.root(nullpicture, nullpicture, nullpicture);
237 ina.s = .5[a.nw,g.ne] + (0,24);
238 inj.s = .5[j.nw,m.ne] + (0,24);
239 root.s = .5[ina.nw,inj.ne] + (0,24);
240 fixelement(a,d,g,j,m);
241 fixelement(root,ina,inj);
243 fill nodecellsbpath(m,0,2) withcolor deletedelement;
244 fill leafnextbpath(m) withcolor black;
245 m.prevpath = m.prev -- g.previn;
246 drawelement(a,d,g,m,ina,inj,root);
247 internalnodeconnect(ina,a,d,g);
248 drawterminationarrow(inj.child[0] -- (inj.child[0] - (0,5)));
249 internalnodeconnect(root,ina);
253 % tree with MNO removed, gclayer begin
254 boxjoin(b.w - a.e = (20,0));
255 leafit.a(data[0], data[1], data[2]);
256 leafit.d(data[3], data[4], data[5]);
257 leafit.g(data[6], data[7], data[8]);
259 leafit.x(dotdata, dotdata, dotdata, dotdata);
260 x.nextpath = x.prevpath = emptypath;
261 internalnodeit.ina(data[3], data[6], nullpicture);
262 internalnodeit.root(nullpicture, nullpicture, nullpicture);
263 ina.s = .5[a.nw,g.ne] + (0,24);
264 root.sw = ina.n + (0,24);
265 .8[x.sw,x.se] = root.n + (0,24);
267 fixelement(root,ina,x);
269 drawelement(a,d,g,ina,root);
270 fillelement(x)(upperlayerfill); drawelement(x) withcolor upperlayer;
272 interim linecap := butt;
273 draw (x.sw - (5,10)) -- (x.se + (40,-10)) withpen pencircle scaled 5 dashed evenly scaled 3 withcolor upperlayerfill;
275 drawconnarrow x.value[1] {down} .. tension 2 .. {down} root.n withpen connectionpen scaled 2 withcolor upperlayer;
276 internalnodeconnect(ina,a,d,g);
277 internalnodeconnect(root,ina);
281 % tree with MNO removed, gclayer begin
282 boxjoin(b.w - a.e = (20,0));
283 leafit.a(data[0], data[1], data[2]);
284 leafit.d(data[3], data[4], data[5]);
285 leafit.g(data[6], data[7], data[8]);
287 leafit.x(dotdata, dotdata, dotdata, dotdata);
289 x.nextpath = x.prevpath = emptypath;
290 internalnodeit.ina(data[3], data[6], nullpicture);
291 internalnodeit.root(nullpicture, nullpicture, nullpicture);
292 ina.s = .5[a.nw,g.ne] + (0,24);
293 root.sw = ina.n + (0,24);
294 .8[x.sw,x.se] = root.n + (0,24);
296 fixelement(root,ina,x);
298 drawelement(a,d,g,ina,root);
299 fillelement(x)(upperlayerfill); drawelement(x) withcolor upperlayer;
301 interim linecap := butt;
302 draw (x.sw - (5,10)) -- (x.se + (40,-10)) withpen pencircle scaled 5 dashed evenly scaled 3 withcolor upperlayerfill;
304 drawconnarrow x.value[1] {down} .. tension 2 .. {down} root.n withpen connectionpen scaled 2 withcolor upperlayer;
305 internalnodeconnect(ina,a,d,g);
306 internalnodeconnect(root,ina);
310 % tree with MNO removed, gclayer begin
311 boxjoin(b.w - a.e = (20,0));
312 leafit.a(data[0], data[1], data[2]);
313 leafit.d(data[3], data[4], data[5]);
314 leafit.g(data[6], data[7], data[8]);
316 leafit.x(dotdata, dotdata, dotdata, dotdata);
318 x.nextpath = x.prevpath = emptypath;
319 internalnodeit.ina(data[3], data[6], nullpicture);
320 internalnodeit.root(nullpicture, nullpicture, nullpicture);
322 ina.s = .5[a.nw,g.ne] + (0,24);
323 root.sw = ina.n + (0,24);
324 .8[x.sw,x.se] = root.n + (0,24);
326 fixelement(root,ina,x);
328 drawelement(a,d,g,ina,root);
329 fillelement(x)(upperlayerfill); drawelement(x) withcolor upperlayer;
331 interim linecap := butt;
332 draw (x.sw - (5,10)) -- (x.se + (40,-10)) withpen pencircle scaled 5 dashed evenly scaled 3 withcolor upperlayerfill;
334 drawconnarrow x.value[1] {down} .. tension 2 .. {down} root.n withpen connectionpen scaled 2 withcolor upperlayer;
335 internalnodeconnect(ina,a,d,g);
336 internalnodeconnect(root,ina);
340 % tree with MNO removed, gclayer begin
341 boxjoin(b.w - a.e = (20,0));
342 leafit.a(data[0], data[1], data[2]);
343 leafit.d(data[3], data[4], data[5]);
344 leafit.g(data[6], data[7], data[8]);
346 leafit.x(dotdata, dotdata, dotdata, dotdata);
348 x.nextpath = x.prevpath = emptypath;
349 internalnodeit.ina(data[3], data[6], nullpicture);
350 internalnodeit.root(nullpicture, nullpicture, nullpicture);
352 ina.s = .5[a.nw,g.ne] + (0,24);
353 root.sw = ina.n + (0,24);
354 .8[x.sw,x.se] = root.n + (0,24);
356 fixelement(root,ina,x);
358 drawelement(a,d,g,ina,root);
359 fillelement(x)(upperlayerfill); drawelement(x) withcolor upperlayer;
361 interim linecap := butt;
362 draw (x.sw - (5,10)) -- (x.se + (40,-10)) withpen pencircle scaled 5 dashed evenly scaled 3 withcolor upperlayerfill;
364 drawconnarrow x.value[1] {down} .. tension 2 .. {down} (ina.n - (4,0)) withpen connectionpen scaled 2 withcolor upperlayer;
365 internalnodeconnect(ina,a,d,g);
366 internalnodeconnect(root,ina);
370 % tree with MNO removed, gclayer begin
371 leafit.a(nullpicture, nullpicture, nullpicture);
373 leafit.x(dotdata, dotdata, dotdata, dotdata);
375 x.nextpath = x.prevpath = emptypath;
376 .5[x.sw,x.se] = a.n + (0,24);
380 fillelement(x)(upperlayerfill); drawelement(x) withcolor upperlayer;
382 interim linecap := butt;
383 draw (x.sw - (5,10)) -- (x.se + (40,-10)) withpen pencircle scaled 5 dashed evenly scaled 3 withcolor upperlayerfill;
385 drawconnarrow x.value[1] {down} .. tension 2 .. {down} a.n withpen connectionpen scaled 2 withcolor upperlayer;
389 % tree with MNO removed, gclayer begin
390 leafit.a(nullpicture, nullpicture, nullpicture);
393 leafit.x(dotdata, dotdata, dotdata, dotdata);
395 x.nextpath = x.prevpath = emptypath;
396 .5[x.sw,x.se] = a.n + (0,24);
400 fillelement(x)(upperlayerfill); drawelement(x) withcolor upperlayer;
402 interim linecap := butt;
403 draw (x.sw - (5,10)) -- (x.se + (40,-10)) withpen pencircle scaled 5 dashed evenly scaled 3 withcolor upperlayerfill;
405 drawconnarrow x.value[1] {down} .. tension 2 .. {down} a.n withpen connectionpen scaled 2 withcolor upperlayer;