Select Git revision
splay-rotate.asy

Martin Mareš authored
splay-rotate.asy 3.40 KiB
import ads;
import trees;
pair e = bst_edge;
pair le = rotate(-45) * e;
pair re = rotate(45) * e;
pair le1 = rotate(-60) * e * 1.2;
pair re1 = rotate(60) * e * 1.2;
pair le2 = rotate(-45) * e * 0.7;
pair re2 = rotate(45) * e * 0.7;
real ux = 0;
real vx = 5.5;
real ly = 0;
real lly = -3.2;
real lry = -6.8;
real arrlen = 0.5;
real arrx = (ux+vx)/2;
real arry = -0.5;
/*** L: předtím ***/
pair lu[];
lu[0] = (ux, ly);
lu[1] = lu[0] + le;
lu[2] = lu[0] + re;
lu[3] = lu[1] + le2;
lu[4] = lu[1] + re2;
lu[5] = lu[0] + bst_mini;
tree_init(lu);
tree_edge(0, 1, thick);
tree_edge(0, 2);
tree_edge(0, 5);
tree_edge(1, 3);
tree_edge(1, 4);
tree_node(0, "y");
tree_node(1, "x");
tree_sub(2, "C");
tree_sub(3, "A");
tree_sub(4, "B");
/*** L: potom ***/
pair lv[];
lv[0] = (vx, ly);
lv[1] = lv[0] + re;
lv[2] = lv[0] + le;
lv[3] = lv[1] + le2;
lv[4] = lv[1] + re2;
lv[5] = lv[0] + bst_mini;
tree_init(lv);
tree_edge(0, 1, thick);
tree_edge(0, 2);
tree_edge(0, 5);
tree_edge(1, 3);
tree_edge(1, 4);
tree_node(0, "x");
tree_node(1, "y");
tree_sub(2, "A");
tree_sub(3, "B");
tree_sub(4, "C");
/*** LL: předtím ***/
pair llu[];
llu[0] = (ux, lly); // z
llu[1] = llu[0] + le1; // y
llu[2] = llu[1] + le; // x
llu[3] = llu[0] + re1; // D
llu[4] = llu[1] + re; // C
llu[5] = llu[2] + le2; // A
llu[6] = llu[2] + re2; // B
llu[7] = llu[0] + bst_mini;
tree_init(llu);
tree_edge(0, 1, thick);
tree_edge(1, 2, thick);
tree_edge(0, 3);
tree_edge(0, 7);
tree_edge(1, 4);
tree_edge(2, 5);
tree_edge(2, 6);
tree_node(0, "z");
tree_node(1, "y");
tree_node(2, "x");
tree_sub(3, "D");
tree_sub(4, "C");
tree_sub(5, "A");
tree_sub(6, "B");
/*** LL: poté ***/
pair llv[];
llv[0] = (vx, lly); // x
llv[1] = llv[0] + re1; // y
llv[2] = llv[1] + re; // z
llv[3] = llv[0] + le1; // A
llv[4] = llv[1] + le; // B
llv[5] = llv[2] + le2; // C
llv[6] = llv[2] + re2; // D
llv[7] = llv[0] + bst_mini;
tree_init(llv);
tree_edge(0, 1, thick);
tree_edge(1, 2, thick);
tree_edge(0, 7);
tree_edge(0, 3);
tree_edge(1, 4);
tree_edge(2, 5);
tree_edge(2, 6);
tree_node(0, "x");
tree_node(1, "y");
tree_node(2, "z");
tree_sub(3, "A");
tree_sub(4, "B");
tree_sub(5, "C");
tree_sub(6, "D");
/*** LP: předtím ***/
pair lru[];
lru[0] = (ux, lry); // y
lru[1] = lru[0] + le1; // w
lru[2] = lru[1] + re; // x
lru[3] = lru[0] + re1; // D
lru[4] = lru[1] + le; // A
lru[5] = lru[2] + le2; // B
lru[6] = lru[2] + re2; // C
lru[7] = lru[0] + bst_mini;
tree_init(lru);
tree_edge(0, 1, thick);
tree_edge(1, 2, thick);
tree_edge(0, 3);
tree_edge(0, 7);
tree_edge(1, 4);
tree_edge(2, 5);
tree_edge(2, 6);
tree_node(0, "y");
tree_node(1, "w");
tree_node(2, "x");
tree_sub(3, "D");
tree_sub(4, "A");
tree_sub(5, "B");
tree_sub(6, "C");
/*** LP: poté ***/
pair lrv[];
lrv[0] = (vx+0.2, lry); // x
lrv[1] = lrv[0] + le1; // w
lrv[2] = lrv[0] + re1; // y
lrv[3] = lrv[1] + le2; // A
lrv[4] = lrv[1] + re2; // B
lrv[5] = lrv[2] + le2; // C
lrv[6] = lrv[2] + re2; // D
lrv[7] = lrv[0] + bst_mini;
tree_init(lrv);
tree_edge(0, 1, thick);
tree_edge(0, 2, thick);
tree_edge(0, 7);
tree_edge(1, 3);
tree_edge(1, 4);
tree_edge(2, 5);
tree_edge(2, 6);
tree_node(0, "x");
tree_node(1, "w");
tree_node(2, "y");
tree_sub(3, "A");
tree_sub(4, "B");
tree_sub(5, "C");
tree_sub(6, "D");
/*** Šipky ***/
void arr(real y, string lab)
{
y += arry;
draw((arrx-arrlen, y) -- (arrx+arrlen, y), Arrow(size=6));
label("\bf " + lab, (arrx, y), 1.5N);
}
arr(ly, "zig");
arr(lly, "zig-zig");
arr(lry, "zig-zag");