Amazon interview question

Write code to convert a Binary Tree into a singly linked list by traversing level by level.

Interview Answer

Anonymous

15 Jul 2012

struct { void * left; void * right; void * linkedlist; uint32_t val; } node_t; node_t tree; node_t *list[100]; //Assume tree depth is less than 100 node_t *tail[100]; //Assume tree depth is less than 100 node_t *resultList = NULL, *tail = NULL; void walkTree(node_t *tree, int level) { if (tree == NULL) return; if (list[level] == NULL) { tail[level] = list[level] = tree; } else { tree->linkedlist = list[level]->linkedlist; list[level]->linkedlist = tree; } walkTree((node_t *) tree->left, level+1); walkTree((node_t *) tree->right, level+1); } main () { int level = 0; bzero(list, 100*sizeof(node_t *)); walkTree(tree, 0); while (list[cursor]) { if (resultList) { resultTail->linkedList = list[cursor]; resultTail = tail[cursor]; } else { resultList = list[cursor]; resultTail = tail[cursor]; } } }

1