c - 使用递归在c中插入BST

标签 c recursion binary-search-tree

我是 c 的新手,但曾用其他语言编写过程序。我有这段用于插入 BST 的代码:

struct tnode {
  int data;
  struct tnode* left;
  struct tnode* right;
};

struct tnode* addnode(struct tnode* root, int data) {
    if (root == NULL) return talloc(data);
    else if (data < root->data) root->left = addnode(root->left, data);
    else root->right = addnode(root->right, data);
}

该代码运行良好,但试图理解它的工作原理让我发疯。我觉得它不应该正确返回,但我已经对其进行了广泛的测试并且它有效。我的提示是当你用一个值不为 NULL 的根调用 addnode 时,它​​递归地调用 addnode 返回一个新的 tnode 到 root->left 或 root->right。这可以。但是,在递归调用返回后,函数应该从原始调用的那个点恢复执行。然后它应该在 if-else 子句之后恢复。在该子句之后没有返回。当我添加多个项目时,它到底是怎么正确返回的?

我正在尝试并在 if-else 子句之后添加了一个 puts("hello"); ,这搞砸了整个事情并给了我一个段错误:11(不管那是什么意思).

最佳答案

你完全正确。您拥有的函数在 else 语句之后缺少返回调用,这肯定会让您感到困惑。尝试使用以下函数:

struct tnode* addnode(struct tnode* root, int data) {
    if (root == NULL) return talloc(data);
    else if (data < root->data) root->left = addnode(root->left, data);
    else root->right = addnode(root->right, data);
    return root;
}

如果这有帮助,请告诉我。编程愉快!

关于c - 使用递归在c中插入BST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43795536/

相关文章:

c++ - 在 C++ 中解析公共(public)函数时的编译错误

与 char* 冲突的类型

c - 为什么我可以单独打印每个字符,但不能整体打印?

python - 如何使用 turtle 在Python中绘制谢尔宾斯基地毯

recursion - 查找并删除列表中最后一次出现的指定元素 [racket]

recursion - 使用 recur 时传递给关键字的参数数量错误

c - 对 extern 函数的 undefined reference - C

C Win32 API : Set state of check box

无法删除二叉搜索树

c - 在C中查找BST中奇数/偶数/负数的数量