У меня есть следующая функция (и я извиняюсь за свои ужасные навыки Ansi-C или их отсутствие):
// Stick a PacketNode into a HashTree
void InsertPacket(IPv4 database, int treeIndex, int hash, Packet packet)
{
// Check to see if the HashTree already has a BST for this hash, and
// create one if not.
if ((*database->hashTrees[treeIndex])->bst == NULL)
{
printf("hashTree[%d]->bst is NULL\n", treeIndex);
Tree newTree;
newTree = InitTree();
newTree->key = hash;
(*database->hashTrees[treeIndex])->bst = newTree; //THIS LINE...
}
if ((*database->hashTrees[treeIndex])->bst != NULL)
{
printf("hashTree[%d]->bst is NOT NULL\n", treeIndex);
}
// Insert the PacketNode into the BST
Tree node;
node = InitNode(hash, packet);
TreeInsert((*database->hashTrees[treeIndex])->bst, node); //OR THIS ONE...
InorderTreeWalk((*database->hashTrees[treeIndex])->bst);
}
Проблема в том, что я хочу выполнить эту последнюю функцию InorderTreeWalk () вфункция 3 уровня вверх.(т.е. я вызываю Store (база данных, пакет), который вызывает функцию InsertData (), которая вызывает функцию InsertPacket () выше, и я хочу вызвать обход дерева сразу после Store). В функции InsertData я инициализирую и устанавливаю> hashTree [treeIndex] = & newHashTree, затем вызовите InsertPacket () для создания BST, который является частью структуры HashTree.
Я хочу сохранить пару сотен этих пакетов, затем runфункция InorderTreeWalk () сразу после зацикленного вызова Store (базы данных, пакета).
Я не уверен, что предоставляю достаточно информации, и я знаю Я убиваю указатели C,Последние 3 с лишним года я программировал в основном на C # и Python ... «Все мои базы принадлежат» кому-то другому.
Любой совет будет оценен.
PS:база данных - это структура, имеющая массив указателей, hashTable [256], для структурирования HashTrees.Которые в свою очередь содержат int и двоичное дерево поиска, bst.BST имеют ключ от целых и имеют структурный пакет в качестве данных.Пакеты просто содержат несколько массивов символов.