使用递归

时间:2017-05-05 02:28:46

标签: 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);
}

代码运作得非常好,但它让我疯狂地试图理解它是如何工作的。我觉得它不应该正确返回,但我已经对它进行了广泛的测试并且它有效。我的抱怨是,当你用一个值为n的根调用addnode时,它会递归地调用addnode,它会返回一个新的tnode到root-&gt; left或root-&gt; right。这可以。但是,在递归调用返回后,函数应从原始调用中的该点恢复执行。然后它应该在if-else子句之后继续。在该条款之后没有回报。当我添加多个项目时,它到底是怎么回事?

我正在尝试解决问题并在if-else子句之后添加了puts("hello");并且搞砸了整个事情并给了我一个分段错误:11(无论这意味着什么)。

1 个答案:

答案 0 :(得分:3)

你是对的。你所拥有的函数在else语句之后缺少一个返回调用,这肯定会让你感到困惑。尝试使用以下功能:

clear:left

如果这有帮助,请告诉我。快乐的节目!