Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct node2
- {
- void* data;
- struct node2* one;
- struct node2* two;
- };
- static struct node2* rootSavedRight;
- void prnint(void* p)
- {
- printf("%d ", *(int*)p);
- }
- void BTreeFlattering(struct node2* root, struct node2** head)
- {
- static struct node2* prev = NULL;
- if (root == NULL)
- {
- rootSavedRight = prev; // Запазваме най-крайният възел
- return;
- }
- BTreeFlattering(root->one, head);
- if (prev == NULL)
- {
- *head = root;
- }
- else
- {
- root->one = prev;
- prev->two = root;
- }
- prev = root;
- BTreeFlattering(root->two, head);
- }
- struct node2* newNode(int data)
- {
- void* p = malloc(sizeof(data));
- *(int*)p = data;
- struct node2* t = (struct node2*)malloc(sizeof(struct node2));
- t->data = p;
- t->one = NULL;
- t->two = NULL;
- return t;
- }
- void printList(struct node2* p)
- {
- printf("\n");
- static struct node2* root;
- if (root == NULL)
- root = p;
- while(p!=NULL)
- {
- prnint(p->data);
- p = p->two;
- if (p == root) // Възлите на цикъла започват да се повтарят
- break;
- }
- }
- void inorder(struct node2*p)
- {
- if (!p)
- return;
- inorder(p->one);
- prnint(p->data);
- inorder(p ->two);
- }
- int main()
- {
- struct node2* root = newNode(2);
- root->one = newNode(4);
- root->two = newNode(19);
- root->one->one = newNode(7);
- root->one->two = newNode(10);
- root->two->one = newNode(22);
- /*
- * 2
- * / \
- * 4 19
- * / \ /
- * 7 10 22
- */
- struct node2* head = NULL;
- inorder(root); // Принтиране на дървото в инфиксен ред
- // Преобразуване на дървото в списък
- // инфиксен ред
- BTreeFlattering(root, &head);
- // Свързване на последния с първия елемент на списъка,
- // за да стане цикличен
- rootSavedRight->two = head;
- head->one = rootSavedRight;
- // Принтиране на цикличния списък
- printList(head);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement