struct defs

typedefs

global vars

HANDLE_st1 *NewNode(int v);
void PrintIndent(int n, int path);
void PrintSubTree(HANDLE_st1 *h, int n, int path);
void PrintTree(HANDLE_st1 *h);
void InOrder(HANDLE_st1 *h);
HANDLE_st1 *RandTree(int n);
void SwapValue(HANDLE_st1 *l, HANDLE_st1 *r);
void SwapLeft(HANDLE_st1 *l, HANDLE_st1 *r);
void SwapRight(HANDLE_st1 *l, HANDLE_st1 *r);
void Bimerge(HANDLE_st1 *root, HANDLE_st1 *sp_r, int dir);
void Bisort(HANDLE_st1 *root, HANDLE_st1 *sp_r, int dir);
void main(int n);

HANDLE_st1 *NewNode(
int v)
{
  local vars

  temp_142 = malloc();
  h1 = (struct node *) temp_142;
  (*h1).value = v1;
  (*h1).left = 0;
  (*h1).right = 0;
  return (h1);
}

void PrintIndent(
int n, 
int path)
{
  local vars

  if ((n1 == 0))
  {
    /** puts("*") **/
    temp_151 = "*";
    puts(temp_151);
  }
  temp_161 = (n1 - 1);
  divisor1 = (1 << temp_161);
  while ( (n1 > 0) )
  {
    if ((n1 == 1))
    {
      if ((path1 == 0))
      {
        /** puts("/----->") **/
        temp_172 = "/----->";
        puts(temp_172);
      }
      else
      {
        /** puts("\\----->") **/
        temp_182 = "\\----->";
        puts(temp_182);
      }
    }
    else
    {
      /** ((path / divisor) == ((path % divisor) / (divisor / 2))) **/
      temp_192 = (path1 / divisor2);
      temp_212 = (path1 % divisor2);
      temp_222 = (divisor2 / 2);
      temp_202 = (temp_212 / temp_222);
      if ((temp_192 == temp_202))
      {
        /** puts("       ") **/
        temp_232 = "       ";
        puts(temp_232);
      }
      else
      {
        /** puts("|      ") **/
        temp_242 = "|      ";
        puts(temp_242);
      }
    }
    path2 = (path1 % divisor2);
    divisor3 = (divisor2 / 2);
    n2 = (n1 - 1);
  }
}

void PrintSubTree(
HANDLE_st1 *h, 
int n, 
int path)
{
  local vars

  if ((h1 != 0))
  {
    r1 = (*h1).right;
    temp_251 = (n1 + 1);
    temp_261 = (path1 * 2);
    PrintSubTree1(r1, temp_251, temp_261);
    temp_271 = "(";
    puts(temp_271);
    put(n1);
    temp_281 = ")\t";
    puts(temp_281);
    PrintIndent2(n1, path1);
    temp_291 = " ";
    puts(temp_291);
    temp_301 = (*h1).value;
    put(temp_301);
    temp_311 = "\n";
    puts(temp_311);
    l1 = (*h1).left;
    temp_321 = (n1 + 1);
    temp_341 = (path1 * 2);
    temp_331 = (temp_341 + 1);
    PrintSubTree3(l1, temp_321, temp_331);
  }
}

void PrintTree(
HANDLE_st1 *h)
{
  PrintSubTree1(h1, 0, 0);
}

void InOrder(
HANDLE_st1 *h)
{
  local vars

  if ((h1 != 0))
  {
    l1 = (*h1).left;
    r1 = (*h1).right;
    InOrder1(l1);
    temp_351 = (*h1).value;
    put(temp_351);
    temp_361 = " ";
    puts(temp_361);
    InOrder2(r1);
  }
}

HANDLE_st1 *RandTree(
int n)
{
  local vars

  if ((n1 > 1))
  {
    next_val2 = random();
    h2 = NewNode1(next_val2);
    temp_371 = (n1 / 2);
    l2 = RandTree2(temp_371);
    temp_381 = (n1 / 2);
    r2 = RandTree3(temp_381);
    (*h2).left = l2;
    (*h2).right = r2;
  }
  else
  {
    h3 = 0;
  }
  return (h4);
}

void SwapValue(
HANDLE_st1 *l, 
HANDLE_st1 *r)
{
  local vars

  temp1 = (*l1).value;
  (*l1).value = (*r1).value;
  (*r1).value = temp1;
}

void SwapLeft(
HANDLE_st1 *l, 
HANDLE_st1 *r)
{
  local vars

  ll1 = (*l1).left;
  rl1 = (*r1).left;
  (*l1).left = rl1;
  (*r1).left = ll1;
}

void SwapRight(
HANDLE_st1 *l, 
HANDLE_st1 *r)
{
  local vars

  lr1 = (*l1).right;
  rr1 = (*r1).right;
  (*l1).right = rr1;
  (*r1).right = lr1;
}

void Bimerge(
HANDLE_st1 *root, 
HANDLE_st1 *sp_r, 
int dir)
{
  local vars

  temp_401 = (*root1).value;
  temp_411 = (*sp_r1).value;
  temp_391 = (temp_401 > temp_411);
  rightexchange1 = (temp_391 ^ dir1);
  if ((rightexchange1 != 0))
  {
    SwapValue1(root1, sp_r1);
  }
  pl1 = (*root1).left;
  pr1 = (*root1).right;
  while ( (pl2 != 0) )
  {
    temp_432 = (*pl2).value;
    temp_442 = (*pr2).value;
    temp_422 = (temp_432 > temp_442);
    elementexchange2 = (temp_422 ^ dir1);
    if ((rightexchange1 != 0))
    {
      if ((elementexchange2 != 0))
      {
        SwapValue2(pl2, pr2);
        SwapRight3(pl2, pr2);
        pl3 = (*pl2).left;
        pr3 = (*pr2).left;
      }
      else
      {
        pl4 = (*pl2).right;
        pr4 = (*pr2).right;
      }
    }
    else
    {
      if ((elementexchange2 != 0))
      {
        SwapValue4(pl2, pr2);
        SwapLeft5(pl2, pr2);
        pl6 = (*pl2).right;
        pr6 = (*pr2).right;
      }
      else
      {
        pl7 = (*pl2).left;
        pr7 = (*pr2).left;
      }
    }
  }
  temp_451 = (*root1).left;
  if ((temp_451 != 0))
  {
    rl1 = (*root1).left;
    rr1 = (*root1).right;
    temp_461 = (*root1).value;
    sp_l2 = NewNode6(temp_461);
    Bimerge7(rl1, sp_l2, dir1);
    Bimerge8(rr1, sp_r1, dir1);
    (*root1).value = (*sp_l2).value;
  }
}

void Bisort(
HANDLE_st1 *root, 
HANDLE_st1 *sp_r, 
int dir)
{
  local vars

  temp_471 = (*root1).left;
  if ((temp_471 == 0))
  {
    temp_501 = (*root1).value;
    temp_511 = (*sp_r1).value;
    temp_491 = (temp_501 > temp_511);
    temp_481 = (temp_491 ^ dir1);
    if ((temp_481 != 0))
    {
      SwapValue1(root1, sp_r1);
    }
  }
  else
  {
    l1 = (*root1).left;
    r1 = (*root1).right;
    temp_521 = (*root1).value;
    sp_l2 = NewNode2(temp_521);
    Bisort3(l1, sp_l2, dir1);
    temp_531 = (dir1 == 0);
    Bisort4(r1, sp_r1, temp_531);
    (*root1).value = (*sp_l2).value;
    Bimerge5(root1, sp_r1, dir1);
  }
}

void main(
int n)
{
  local vars

  h2 = RandTree1(n1);
  sval2 = random();
  s2 = NewNode2(sval2);
  temp_541 = "Original Tree: ";
  puts(temp_541);
  PrintTree3(h2);
  InOrder4(h2);
  temp_551 = (*s2).value;
  put(temp_551);
  temp_561 = "\n";
  puts(temp_561);
  Bisort5(h2, s2, 0);
  temp_571 = "Sorted Tree: ";
  puts(temp_571);
  PrintTree6(h2);
  InOrder7(h2);
  temp_581 = (*s2).value;
  put(temp_581);
  temp_591 = "\n";
  puts(temp_591);
  Bisort8(h2, s2, 1);
  temp_601 = "Sorted Tree: ";
  puts(temp_601);
  PrintTree9(h2);
  InOrder10(h2);
  temp_611 = (*s2).value;
  put(temp_611);
  temp_621 = "\n";
  puts(temp_621);
}