bin_tree.c
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:2k
开发平台:

MultiPlatform

  1. #include <LEDA/impl/bin_tree.h>
  2. #include <LEDA/impl/avl_tree.h>
  3. #include <LEDA/impl/bb_tree.h>
  4. #include <LEDA/impl/rb_tree.h>
  5. #include <LEDA/impl/rs_tree.h>
  6. #include <LEDA/window.h>
  7. window W;
  8. void draw_node(double x, double y, void*, int bal)
  9. { W.draw_filled_node(x,y,yellow);
  10.   W.draw_ctext(x,y,string("%d",bal),violet); 
  11.  }
  12. void draw_leaf(double x, double y, void* key, int)
  13. { W.draw_filled_rectangle(x-1.4,y-1.4,x+1.4,y+1.4,black);
  14.   W.draw_ctext(x,y,string("%d",key),white); 
  15.  }
  16. void draw_edge(double x0, double y0, double x1, double y1)
  17. { W.draw_edge(point(x0,y0),point(x1,y1),blue); }
  18. main()
  19. {
  20.   bin_tree* TREE[5];
  21.   string    NAME[5];
  22.   TREE[0] = new bin_tree;  NAME[0] = "BINARY TREE";
  23.   TREE[1] = new avl_tree;  NAME[1] = "AVL TREE";
  24.   TREE[2] = new bb_tree;  NAME[2] = "BB[ALPHA] TREE";
  25.   TREE[3] = new rb_tree;   NAME[3] = "RED/BLACK TREE";
  26.   TREE[4] = new rs_tree;   NAME[4] = "RANDOMIZED SEARCH TREE";
  27.   panel P("BINARY TREES");
  28.   int n = 20;
  29.   int mode = 0;
  30.   int sel = 0;
  31.   P.choice_item("TREE",sel,"bin_tree","avl_tree","bb_tree","rb_tree","rs_tree");
  32.   P.choice_item("INPUT",mode,"random", "1 2 3 ...");
  33.   P.int_item("# INSERTS",n,0,50);
  34.   W.set_node_width(10);
  35.   W.set_line_width(2);
  36.   for(;;)
  37.   {
  38.     P.open();
  39.     W.clear();
  40.     W.message(NAME[sel]);
  41.     bin_tree* T = TREE[sel];
  42.   
  43.     T->clear();
  44.   
  45.     int i;
  46.   
  47.     if (mode==0)
  48.       for(i=0;i<n;i++) T->insert((void*)rand_int(0,99),0);
  49.     else
  50.       for(i=0;i<n;i++) T->insert((void*)i,0);
  51.   
  52.     double dy = (W.ymax()-W.ymin())/10;
  53.   
  54.     T->draw(draw_node,draw_leaf,draw_edge, W.xmin(),W.xmax(),W.ymax()-dy,dy);
  55.   
  56.     W.read_mouse();
  57.   
  58.   }
  59.   
  60.   return 0;
  61. }