user: Translate the below assembly code into C programming language:

```asm
<unroottree>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  lea    -0x61000(%rsp),%r11
L767:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L767
  sub    $0xb40,%rsp
  mov    %rdi,-0x61b38(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x61b28(%rbp)
  movl   $0x0,-0x61b24(%rbp)
  movl   $0x0,-0x61b20(%rbp)
  movl   $0x0,-0x61b1c(%rbp)
  movl   $0x0,-0x61b18(%rbp)
  movl   $0x0,-0x61b14(%rbp)
  movl   $0x0,-0x61b10(%rbp)
  movl   $0x0,-0x61b0c(%rbp)
  movl   $0x0,-0x61b08(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x61b04(%rbp)
  movb   $0x0,-0x61a90(%rbp)
  movb   $0x0,-0x61b00(%rbp)
  jmp    L159
L508:
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x2c,%eax
  je     L164
  cmp    $0x2c,%eax
  jg     L31
  cmp    $0x28,%eax
  je     L719
  cmp    $0x29,%eax
  je     L363
  jmp    L31
L719:
  addl   $0x1,-0x61b10(%rbp)
  addl   $0x1,-0x61b28(%rbp)
  jmp    L159
L363:
  subl   $0x1,-0x61b10(%rbp)
  addl   $0x1,-0x61b28(%rbp)
  jmp    L159
L164:
  cmpl   $0x1,-0x61b10(%rbp)
  jne    L527
  addl   $0x1,-0x61b14(%rbp)
L527:
  addl   $0x1,-0x61b28(%rbp)
  jmp    L159
L31:
  addl   $0x1,-0x61b28(%rbp)
  nop
L159:
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  jne    L508
  cmpl   $0x1,-0x61b14(%rbp)
  jg     L600
  movl   $0x0,-0x61b28(%rbp)
  movl   $0x0,-0x61b10(%rbp)
  jmp    L471
L747:
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x28,%eax
  je     L250
  cmp    $0x29,%eax
  je     L290
  jmp    L557
L250:
  addl   $0x1,-0x61b10(%rbp)
  cmpl   $0x2,-0x61b10(%rbp)
  jne    L101
  cmpl   $0x0,-0x61b0c(%rbp)
  jne    L101
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movb   $0x5e,(%rax)
  movl   $0x1,-0x61b0c(%rbp)
L101:
  addl   $0x1,-0x61b28(%rbp)
  jmp    L471
L290:
  cmpl   $0x2,-0x61b10(%rbp)
  jne    L13
  cmpl   $0x0,-0x61b08(%rbp)
  jne    L13
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movb   $0x5e,(%rax)
  addl   $0x1,-0x61b28(%rbp)
  jmp    L69
L169:
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movb   $0x5e,(%rax)
  addl   $0x1,-0x61b28(%rbp)
L69:
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L494
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x28,%al
  je     L494
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2c,%al
  je     L494
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  je     L494
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L169
L494:
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L432
  movl   $0x0,-0x61b20(%rbp)
  movb   $0x0,-0x61b00(%rbp)
  jmp    L0
L558:
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L515
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x61b20(%rbp),%eax
  cltq
  mov    %dl,-0x61b00(%rbp,%rax,1)
  addl   $0x1,-0x61b20(%rbp)
L515:
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movb   $0x5e,(%rax)
  addl   $0x1,-0x61b28(%rbp)
L0:
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L784
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x28,%al
  je     L784
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2c,%al
  je     L784
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  jne    L558
L784:
  mov    -0x61b20(%rbp),%eax
  cltq
  movb   $0x0,-0x61b00(%rbp,%rax,1)
L432:
  movzbl -0x61b00(%rbp),%eax
  test   %al,%al
  je     L603
  lea    -0x61b00(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x61b04(%rbp)
  mov    -0x61b28(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x61b20(%rbp)
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x28,%al
  jne    L704
  movl   $0x1,-0x61b1c(%rbp)
  addl   $0x1,-0x61b20(%rbp)
  jmp    L518
L529:
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x28,%eax
  je     L325
  cmp    $0x29,%eax
  je     L330
  jmp    L283
L325:
  addl   $0x1,-0x61b1c(%rbp)
  addl   $0x1,-0x61b20(%rbp)
  jmp    L518
L330:
  subl   $0x1,-0x61b1c(%rbp)
  addl   $0x1,-0x61b20(%rbp)
  jmp    L518
L283:
  addl   $0x1,-0x61b20(%rbp)
  nop
L518:
  cmpl   $0x0,-0x61b1c(%rbp)
  jne    L419
  mov    -0x61b20(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L633
L419:
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  jne    L529
L633:
  subl   $0x1,-0x61b20(%rbp)
  addl   $0x1,-0x61b20(%rbp)
  jmp    L520
L593:
  addl   $0x1,-0x61b20(%rbp)
L520:
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L119
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x28,%al
  je     L119
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2c,%al
  je     L119
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  je     L119
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L593
  jmp    L119
L438:
  addl   $0x1,-0x61b20(%rbp)
L704:
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L119
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x28,%al
  je     L119
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2c,%al
  je     L119
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  je     L119
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L438
L119:
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L341
  mov    -0x61b20(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x61b18(%rbp)
  movb   $0x0,-0x61b00(%rbp)
  movl   $0x0,-0x61b1c(%rbp)
  jmp    L565
L609:
  mov    -0x61b18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x61b1c(%rbp),%eax
  cltq
  mov    %dl,-0x61b00(%rbp,%rax,1)
  addl   $0x1,-0x61b1c(%rbp)
  addl   $0x1,-0x61b18(%rbp)
L565:
  mov    -0x61b18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L590
  mov    -0x61b18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x28,%al
  je     L590
  mov    -0x61b18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2c,%al
  je     L590
  mov    -0x61b18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  jne    L609
L590:
  mov    -0x61b1c(%rbp),%eax
  cltq
  movb   $0x0,-0x61b00(%rbp,%rax,1)
  lea    -0x61b00(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movss  -0x61b04(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x61b04(%rbp)
  jmp    L569
L341:
  mov    -0x61b20(%rbp),%eax
  mov    %eax,-0x61b18(%rbp)
L569:
  movl   $0x0,-0x61b1c(%rbp)
  jmp    L561
L523:
  mov    -0x61b18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x61b1c(%rbp),%eax
  cltq
  mov    %dl,-0x61a90(%rbp,%rax,1)
  addl   $0x1,-0x61b18(%rbp)
  addl   $0x1,-0x61b1c(%rbp)
L561:
  mov    -0x61b18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  je     L8
  mov    -0x61b18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L523
L8:
  mov    -0x61b1c(%rbp),%eax
  cltq
  movb   $0x3b,-0x61a90(%rbp,%rax,1)
  mov    -0x61b1c(%rbp),%eax
  add    $0x1,%eax
  cltq
  movb   $0x0,-0x61a90(%rbp,%rax,1)
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L429
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  jmp    L323
L429:
  mov    -0x61b20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
L323:
  movb   $0x0,-0x61b00(%rbp)
  mov    -0x61b04(%rbp),%edx
  lea    -0x61b00(%rbp),%rax
  movd   %edx,%xmm0
  lea    D3(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x61b00(%rbp),%rdx
  mov    -0x61b38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x61a90(%rbp),%rdx
  mov    -0x61b38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
L603:
  movl   $0x1,-0x61b08(%rbp)
L13:
  addl   $0x1,-0x61b28(%rbp)
  subl   $0x1,-0x61b10(%rbp)
  jmp    L471
L557:
  addl   $0x1,-0x61b28(%rbp)
  nop
L471:
  mov    -0x61b28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  jne    L747
  movl   $0x0,-0x61b28(%rbp)
  movl   $0x0,-0x61b24(%rbp)
  jmp    L82
L402:
  mov    -0x61b24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5e,%al
  jne    L291
  jmp    L234
L708:
  addl   $0x1,-0x61b24(%rbp)
L234:
  mov    -0x61b24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5e,%al
  je     L708
  mov    -0x61b28(%rbp),%eax
  cmp    -0x61b24(%rbp),%eax
  je     L615
  mov    -0x61b24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  mov    -0x61b28(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x61b38(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
L615:
  addl   $0x1,-0x61b28(%rbp)
  addl   $0x1,-0x61b24(%rbp)
  jmp    L82
L291:
  mov    -0x61b28(%rbp),%eax
  cmp    -0x61b24(%rbp),%eax
  je     L390
  mov    -0x61b24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  mov    -0x61b28(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x61b38(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
L390:
  addl   $0x1,-0x61b28(%rbp)
  addl   $0x1,-0x61b24(%rbp)
L82:
  mov    -0x61b24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  jne    L402
  mov    -0x61b24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  mov    -0x61b28(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x61b38(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  mov    -0x61b28(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x61b38(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
L600:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L120
  call   <__stack_chk_fail@plt>
L120:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D3
type_guessed: string

tool: D3: :%f

assistant: ```c
void unroottree(char *tree) {
  int i = 0, j = 0, k = 0, l = 0, m = 0, basecount = 0, parentheses = 0;
  int foundopen = 0, foundclose = 0;
  float del_nodelen = 0;
  char length[100], restof[400000];
  restof[0] = '\0';
  length[0] = '\0';
  while (tree[i] != ';') {
    switch (tree[i]) {
    case '(':
      parentheses++;
      i++;
      break;
    case ')':
      parentheses--;
      i++;
      break;
    case ',':
      if (parentheses == 1) {
        basecount++;
      }
      i++;
      break;
    default:
      i++;
      break;
    }
  }
  if (basecount < 2) {
    i = 0;
    parentheses = 0;
    while (tree[i] != ';') {
      switch (tree[i]) {
      case '(':
        parentheses++;
        if (parentheses == 2 && !foundopen) {
          tree[i] = '^';
          foundopen = 1;
        }
        i++;
        break;
      case ')':
        if (parentheses == 2 && !foundclose) {
          tree[i] = '^';
          i++;
          while (tree[i] != ')' && tree[i] != '(' && tree[i] != ',' && tree[i] != ';' && tree[i] != ':') {
            tree[i] = '^';
            i++;
          }
          if (tree[i] == ':') {
            k = 0;
            length[0] = '\0';
            while (tree[i] != ')' && tree[i] != '(' && tree[i] != ',' && tree[i] != ';') {
              if (tree[i] != ':') {
                length[k] = tree[i];
                k++;
              }
              tree[i] = '^';
              i++;
            }
            length[k] = '\0';
          }
          if (length[0] != '\0') {
            del_nodelen = atof(length);
            k = i + 1;
            if (tree[k] == '(') {
              l = 1;
              k++;
              while ((l != 0 || tree[k - 1] != ')') && tree[k] != ';') {
                switch (tree[k]) {
                case '(':
                  l++;
                  k++;
                  break;
                case ')':
                  l--;
                  k++;
                  break;
                default:
                  k++;
                  break;
                }
              }
              k--;
              k++;
              while (tree[k] != ')' && tree[k] != '(' && tree[k] != ',' && tree[k] != ';' && tree[k] != ':')
                k++;
            } else {
              while (tree[k] != ')' && tree[k] != '(' && tree[k] != ',' && tree[k] != ';' && tree[k] != ':')
                k++;
            }
            if (tree[k] == ':') {
              m = k + 1;
              length[0] = '\0';
              l = 0;
              while (tree[m] != ')' && tree[m] != '(' && tree[m] != ',' && tree[m] != ';') {
                length[l] = tree[m];
                l++;
                m++;
              }
              length[l] = '\0';
              del_nodelen += atof(length);
            } else
              m = k;
            l = 0;
            while (tree[m] != ';' && tree[m] != '\0') {
              restof[l] = tree[m];
              m++;
              l++;
            }
            restof[l] = ';';
            restof[l + 1] = '\0';
            if (tree[k] == ':')
              tree[k] = '\0';
            else {
              tree[k] = '\0';
            }
            length[0] = '\0';
            sprintf(length, ":%f", del_nodelen);
            strcat(tree, length);
            strcat(tree, restof);
          }
          foundclose = 1;
        }
        i++;
        parentheses--;
        break;
      default:
        i++;
        break;
      }
    }
    i = 0;
    j = 0;
    while (tree[j] != ';') {
      if (tree[j] == '^') {
        while (tree[j] == '^')
          j++;
        if (i != j)
          tree[i] = tree[j];
        i++;
        j++;
      } else {
        if (i != j)
          tree[i] = tree[j];
        i++;
        j++;
      }
    }
    tree[i] = tree[j];
    tree[i + 1] = '\0';
  }
}
```