【发布时间】:2017-10-03 09:07:21
【问题描述】:
我是 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(无论这意味着什么)。
【问题讨论】:
-
添加talloc函数。
-
您应该收到编译警告,因为函数的
else if或else分支没有返回。您可能应该在}之前添加return root;。
标签: c recursion binary-search-tree