belikemike121 0 Newbie Poster

Hi all, I've spent hours on this and could not get it to work. There also does not appear to be too much help on the subject online so I'm hoping you can help me!

I am implementing a Binary Search Tree in MIPS assembly. I'm having trouble with my insert routine.

My struct for the node is:

typedef struct node_s {
  int data;
  struct node_s *left;
  struct node_s *right;
} node_t;

The C function I'm having problems with is:

void insert_value(node_t** root, int x) {
  if (root == NULL) {
      *root = generate_new_node(x);
  }
  else {
      if ((*root)->data == x) return;
      if ((*root)->data > x) insert_value(&(*root)->left, x);
      else insert_value(&(*root)->right, x);
      }
  }
}

In my MIPS program, generate_new_node is working fine and my conditionals are working correctly as well. The line that is giving me troubles is:

&(*root)->left

My insert_value takes in a double pointer, therefore when calling it recursively I need to get the address to the pointer of the node_t stored in left.

I can get (*root)->left doing:

    move $s0, 0($a0)        # $s0 = *root
    lw $a0, 4($a0)             # $a0 = (*root)->left

However how can I get &((*root)->left)?

I need this urgently. Any help would be much appreciated!!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.