У меня есть вопрос программирования C. Ниже приведена вставка в узел с ключом.AVL/Binary Search Tree
Я не понимаю, почему node->left = insert(node->left,key)
Я предполагаю, что этот код будет обновлять node->left
с чем?
Не звонит ли он insert()
? Это похоже на повторение одной и той же функции снова и снова - это не бесконечный цикл или вставка?
Я проверил несколько примеров, все они обновляют node->left
таким образом, снова вызвав ту же функцию? Скажем, я неправильно понял, что в нем хранится? Указатель? Или они просто магически связаны?
// An AVL tree node
struct node
{
int key;
struct node *left;
struct node *right;
int height;
};
struct node* insert(struct node* node, int key)
{
/* 1. Perform the normal BST rotation */
if (node == NULL)
return(newNode(key));
if (key < node->key)
node->left = insert(node->left, key);//This just called Insert function again?
else
node->right = insert(node->right, key);
Зачем нужно звонить себе, чтобы хранить узел-> слева – CodeGuru
@FlyingAtom, вы понимаете алгоритм, лежащий в основе этого кода? Или вы понимаете деревья двоичного поиска вообще? – Petr
Я знаю, как AVL работает визуально, но с точки зрения кода. Я как бы новичок в C, выходил из PHP-фона. – CodeGuru