Я пытаюсь написать рекурсивную функцию, которая, учитывая root двоичного дерева и ключа, ищет ключ, используя обратный порядок. Функция возвращает NULL, если узел с ключом не найден; в противном случае он возвращает узел, содержащий ключ.
У меня возникли проблемы с возвратом узла, содержащего ключ. Каждый раз, когда я вызываю функцию, а ключ находится в двоичном дереве, функция возвращает NULL. Такое ощущение, что результат продолжает перезаписываться при инициализации в первой строке функции.
Вот функция поиска по порядку:
typedef struct treeNode
{
int data;
struct treeNode *left, *right;
} TreeNode, *TreeNodePtr;
typedef struct
{
TreeNodePtr root;
} BinaryTree;
TreeNodePtr inOrderKey(TreeNodePtr root, int key)
{
TreeNodePtr node = NULL;
if (root != NULL)
{
node = inOrderKey(root->left, key);
if(key == root->data)
{
node = root;
return node;
}
node = inOrderKey(root->right, key);
}
return node;
}
Вот основная функция:
int main()
{
FILE * in = fopen("numbst.txt", "r");
BinaryTree bst;
bst.root = NULL;
int num;
fscanf(in, "%d", &num);
while (num != 0)
{
if (bst.root == NULL)
bst.root = newTreeNode(num);
else
{
TreeNodePtr node = findOrInsert(bst, num);
}
fscanf(in, "%d", &num);
}
printf("\nThe in-order traversal is: ");
inOrder(bst.root);
printf("\nThe pre-order traversal is: ");
preOrder(bst.root);
TreeNodePtr keyNode;
int count = 0;
keyNode = inOrderKey(bst.root, 9);
if (keyNode != NULL)
count = 1;
else
count = 0;
if (count == 1)
printf("\n\n%d exists in the binary tree. In order traversal was used.\n", 9);
else
printf("\n\n%d doesn't exist in the binary tree. In order traversal was used.\n", 9);
return 0;
}
Обратный порядок двоичного дерева, с которым я работаю: 1 2 3 4 5 7 9 21
Предварительный порядок двоичного дерева: 4 1 2 3 7 5 21 9
Я тестирую функцию, используя 9 и 31.