Skip to content

Instantly share code, notes, and snippets.

@simplexityx
Created February 10, 2017 17:24
Show Gist options
  • Save simplexityx/ae0ffa9811ae3cb0ea43dc5e8436d6c7 to your computer and use it in GitHub Desktop.
Save simplexityx/ae0ffa9811ae3cb0ea43dc5e8436d6c7 to your computer and use it in GitHub Desktop.
struct node{
node_t *lchild;
node_t *rchild;
node_t *parent;
int left;
int right;
int height;
int visited;
void* elem;
};
struct set_iter{
node_t *node;
};
void *hopptilvenstre(set_iter_t *iter){
iter->node->lchild->parent=iter->node;
iter->node=iter->node->lchild;
iter->node->visited=1;
return iter->node->elem;
}
void *hopptilhoyre(set_iter_t *iter){
void *item;
iter->node->rchild->parent=iter->node;
iter->node=iter->node->rchild;
//printf("%d\n", *(int*)iter->node->elem);
iter->node->visited=1;
item=iter->node->elem;
return item;
}
void* opp(set_iter_t *iter){
iter->node=iter->node->parent;
}
void *set_next(set_iter_t *iter){
void *end;
end=findmax(iter->node);
void *item;
node_t *res =iter->node;
if(iter->node==NULL){
return;
}
//printf("yo");
//if(iter->node->lchild == NULL && iter->node->rchild== NULL){
//printf("good\n");
while(1){
//regel 1
if(iter->node->lchild == NULL && iter->node->rchild == NULL){
opp(iter);
}
//regel 2
if(iter->node->lchild!=NULL && iter->node->rchild==NULL){
if(iter->node->lchild->visited==1)
opp(iter);
}
//regel 2
if(iter->node->rchild!=NULL && iter->node->lchild==NULL){
if(iter->node->rchild->visited==1)
opp(iter);
}
//regel 3
if(iter->node->lchild!=NULL && iter->node->rchild!=NULL){
if(iter->node->lchild->visited==1 && iter->node->rchild->visited==1)
opp(iter);
}
//venstre
if(iter->node->lchild!=NULL && iter->node->lchild->visited==0){
printf("venstre\n");
item=hopptilvenstre(iter);
return item;
}
//høyre
if(iter->node->rchild!=NULL && iter->node->rchild->visited==0){
printf("hoyre\n");
item=hopptilhoyre(iter);
return item;
}
if(end==iter->node){
printf("slutten på iteratoren");
return;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment