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