bool isCompBinTree()
        {
            QueueList<BinTree*> mQ;

            BinTree* root = this;
            mQ.enQueue(root);

            bool flag = false;

            while (!mQ.isEmpty()) //breadth-first traversal,while the queue is not empty,travel the queue's head node;
            {
                root = mQ.deQueue();
                if (!flag && !(root -> ls && root -> rs))
                {
                    if (!root -> ls && root -> rs)
                    {
                        return false;
                    }
                    flag = true;
                }
                if (flag && (root -> ls || root -> rs))
                {
                    return false;
                }
                if (root -> ls)
                {
                    mQ.enQueue(root -> ls);
                }
                if (root -> rs)
                {
                    mQ.enQueue(root -> rs);
                }
            }
        }
Beispiel #2
0
    void bfs()
        {
            QueueList<Node*> mQ;
            mQ.enQueue(root);

            Node* r;
            while (!mQ.isEmpty()) //breadth-first traversal,while the queue is not empty,travel the queue's head node;
            {
                r = mQ.deQueue();
                cout << r->data << " ";
                for (Node* p = r -> child; p; p = p -> bro)
                {
                    mQ.enQueue(p);
                }
            }
            cout << endl;
        }
Beispiel #3
0
int TaskManager::executeTasksQueue()
{
	int executedTasksCount = 0;

	QueueList<TaskManagerRecord*>* fromQueue;
	QueueList<TaskManagerRecord*>* toQueue;

	if( !tasksQueueA->isEmpty() )
	{
		fromQueue = tasksQueueA;
		toQueue = tasksQueueB;
	}
	else
	{
		fromQueue = tasksQueueB;
		toQueue = tasksQueueA;
	}

	while( !fromQueue->isEmpty() )
	{
		TaskManagerRecord* taskManagerTaskRecord = fromQueue->pop();

		if( taskManagerTaskRecord->taskManagerScheduler->canExecute() )
		{
			taskManagerTaskRecord->runnable->run();
			executedTasksCount++;
		}

		if( taskManagerTaskRecord->taskManagerScheduler->canRemoveFromTaskManager() )
			delete( taskManagerTaskRecord );
		else
			toQueue->push( taskManagerTaskRecord );
	}

	return executedTasksCount;
}