예제 #1
0
// 树形打印二叉树
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);
}
예제 #2
0
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);
}