Почему код сбрасывается? Я пытаюсь сделать двоичное дерево поиска. В программе уже есть pu sh, который принимает узел и добавляет новый узел в начале списка. Pop удалит узел в начале непустого списка и вернет данные. InsertTreeNode вставит узел дерева в отсортированный двоичный список.
struct treeNode {
int data; /* tree node value */
struct treeNode *leftPtr; /* pointer to left subtree */
struct treeNode *rightPtr; /* pointer to right subtree */
};
struct stackEntry {
struct treeNode *treePtr; /* list value */
struct stackEntry *next; /* pointer to next entry in list */
};
struct stackEntry *stackHead = NULL; /* pointer to head of stack */
pu sh - добавить новый узел в начале списка
void push(struct treeNode *treePtr) {
struct stackEntry *newNode;
newNode = malloc(sizeof(struct stackEntry));
newNode->treePtr = treePtr;
newNode->next = stackHead;
stackHead = newNode;
}
pop - удалить узел в начале не пустой список и возвращает его данные
struct treeNode *pop() {
struct stackEntry *current;
struct treeNode *val;
current = stackHead;
stackHead = current->next;
val = current->treePtr;
if (val != NULL) {
free(current);
}
return(val);
}
insertTreeNode - вставляет узел дерева в отсортированное двоичное дерево
void insertTreeNode( struct treeNode **treePtr, int value )
{
if ( *treePtr == NULL ) {
*treePtr = malloc( sizeof( struct treeNode ) );
( *treePtr )->data = value;
( *treePtr )->leftPtr = NULL;
( *treePtr )->rightPtr = NULL;
}
else { /* tree is not empty */
/* data to insert is less than data in current node */
if ( value < ( *treePtr )->data ) {
insertTreeNode( &( ( *treePtr )->leftPtr ), value );
}
/* data to insert is greater than data in current node */
else if ( value > ( *treePtr )->data ) {
insertTreeNode( &( ( *treePtr )->rightPtr ), value );
}
else { /* duplicate data value ignored */
printf( "dup" );
}
}
}
void delete( struct treeNode **treePtr, struct treeNode** rootRef )
{
struct treeNode *current = NULL;
current = *treePtr; // current is address of the parent's sub-tree pointer to the node to be deleted
push(current->leftPtr);
push(current->rightPtr);
(*treePtr) = NULL;
free(current);
while(stackHead != NULL) {
current = pop();
if(*rootRef != NULL) {
push((*rootRef)->leftPtr);
push((*rootRef)->rightPtr);
insertTreeNode(rootRef, stackHead->treePtr->data);
}
}
}