First of all, this is a homework related problem.
I'm trying to solve the Stanford Binary Tree to Doubly Linked List problem.
Tree List Recursion Problem
I'm kind of stumped...I don't get why it falls into a loop. It builds a tree that looks like this:
6
/ \
3 7
/ \ \
0 4 9
\ \ /
2 5 8
/
1
It makes it as far as setting the head to '0', descending to '1', then it loops between 0 and 1!
I don't understand why it doesn't return to '2'. If you could be so kind as to help me understand why. Is it a pointer problem? Do I not understand the recursive algorithm? Static variables?!
Just a nudge in the right direction, please.
Code:10 struct node 11 { 12 int data; 13 struct node *small; 14 struct node *large; 15 }; 16 17 typedef struct node NODE; 18 19 20 int main(void) 21 { 22 NODE *genTree(int *data); 23 NODE *treeToList(NODE **current); 24 void printTree(NODE *tree); 25 void printList(NODE *list); 26 27 NODE *tree, *list; 28 int data[10] = {6, 3, 7, 0, 4, 9, 2, 5, 1, 8}, 29 i = 0; 30 31 printf("Data:\n"); 32 for( ;i < 10; i++) 33 printf("%d ", data[i]); 34 printf("\n"); 35 36 tree = genTree(data); 37 printf("Data in tree:\n"); 38 printTree(tree); 39 printf("\n"); 40 41 list = treeToList(&tree); 42 printf("Data in list:\n"); 43 printList(list); 44 printf("\n"); 45 } 46 47 NODE *treeToList(NODE **current) 48 { 49 void link(NODE *smaller, NODE *larger); 50 51 static NODE *tail = NULL, 52 *head = NULL; 53 54 if(!(*current)) return NULL; 55 56 treeToList(&(*current)->small); 57 58 if(!head) 59 head = *current; 60 61 if(tail != NULL) 62 link(tail, *current); 63 64 tail = *current; 65 66 treeToList(&(*current)->large); 67 68 link(tail, head); 69 70 return head; 71 } 72 73 void link(NODE *small, NODE *large) 74 { 75 small->large = large; 76 large->small = small; 77 }



LinkBack URL
About LinkBacks




