I would start by clearing out each property in your node to 0. Then you will always have a baseline to test against when you navigate to insert your next node and you have found the bottom of your tree.
You can simplify a few things in your function, then it might be a bit clearer how to initialize your node. The way you currently have the function Initialize written, you have to call it like this:
Node elt;
Initialize(&(&elt));
or
Node elt;
Node *pElt = &elt;
Initialize(&pElt);
Start with the struct that you will pass into be initialized. You are not allocating any new memory for the actual node, so you can remove one of the *, and use a single pointer rather than a pointer to a pointer:
void Initialize(node *currentNode)
You can then call the function like this:
Node elt;
Initialize(&elt);
Also, you don't have to dereference every access in your function to currentNode twice;
first time: (*currentNode)
second time: ->
You can replace all of the
(*currentNode)->
with
currentNode->
Beyond that, I am not sure exactly how you need the items to be initialized. I can tell you that if the user answers no for the first question of is there a child, but yes for a next node, temp_1 will not be initialized, and you will attempt to access an uninitialized pointer.
Also, I do not see any code that initializes your
prev data member.
One final tip, just like with the call to Initialize(¤tNode), you can simplify your calls with the pointers, if you change the definitions for temp_1 and temp_2 to use a single pointer rather than a pointer to a pointer like this:
node *temp_2;
...
currentNode->next = (node *)malloc(sizeof(node));
temp_2 = currentNode->next;
currentNode = temp_1->prev;
Initialize(temp_2);