// 树形打印二叉树 void printTree(BinaryTreeNode root, int layer){ printf("\n"); if (root == NULL) { return; } int deep = treeDeep(root); Queue queue = createQueue(1); enqueue(root, queue); BinaryTreeNode emptyNode = getEmptyNode(); Queue nextQueue = NULL; int index = 1; while (!isEmpty(queue)) { int currentQueueCapacity = (int)pow(2, index - 1); int nextQueueCapacity = 2 * currentQueueCapacity; if (queue -> size == currentQueueCapacity) { nextQueue = createQueue(nextQueueCapacity); } BinaryTreeNode currentNode = frontAndDequeue(queue); nodeEnqueue(currentNode -> left, nextQueue, emptyNode); nodeEnqueue(currentNode -> right, nextQueue, emptyNode); // 计算应打印的空格数 if (currentNode -> value == 0) { printf(" "); } else{ printf("%d",currentNode -> value); } if (queue -> size == 0 && index != deep) { free(queue); queue = nextQueue; printf("\n"); index++; } else{ continue; } } free(emptyNode); free(queue); }
void OrderedMessageQueue::insertMessage(MessageObject *messageObject, int outletIndex, PdMessage *message) { LinkedListNode *newNode = getEmptyNode(); MessageDestination *destination = (MessageDestination *) newNode->data; destination->object = messageObject; destination->message = message; destination->index = outletIndex; LinkedListNode *node = head; while (node != NULL) { destination = (MessageDestination *) node->data; if (message->getTimestamp() < destination->message->getTimestamp()) { insertBefore(newNode, node); return; } else { node = node->next; } } insertAfter(newNode, tail); }