AVL /二叉搜索树

时间:2015-10-09 09:25:20

标签: c algorithm binary-tree avl-tree

我有一个C编程问题。以下是带有密钥的节点的插入。

我不明白为什么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);

1 个答案:

答案 0 :(得分:4)

是的,他们再次调用insert函数,但请注意参数已更改 1 。这就是所谓的recursion

另请注意,总是再次调用相同的函数:如果node==NULL它没有调用它。所以这不是无限的;当您执行node->leftnode->left->left等操作时,您曾到达指针为NULL的点。

1 我不是说递归调用必须总是改变其论点,但这是最常用的方法。