c - 从函数返回时无法接收节点指针的值
问题描述
所以这是我在二叉搜索树中的搜索功能。
将结果节点返回到我的插入函数时,插入函数中的变量无法接收从搜索函数返回的值。
typedef struct tree_node {
struct tree_node *left_child;
struct tree_node *right_child;
int data;
int level;
} Node;
typedef Node* Tree;
Tree searchPoint(Tree node, int key)
{
if (node == NULL || key == node->data) {
return node;
}
if (key < node->data) {
return searchPoint(node->left_child, key);
}
if (key > node->data) {
return searchPoint(node->right_child, key);
}
return node;
}
Tree insert(Tree root, int key, Tree head)
{
Tree ptr, newNode;
newNode = (Tree)malloc(sizeof(Node*));
ptr = (Tree)malloc(sizeof(Node*));
if (root == NULL) {
newNode->data = key;
if (head == NULL) {
newNode->level = 1;
}
else {
ptr = searchPoint(head, key);
newNode->level = ptr->level + 1;
}
newNode->left_child = newNode->right_child = NULL;
return newNode;
}
if (key < root->data) {
root->left_child = insert(root->left_child, key, head);
}
else if (key > root->data) {
root->right_child = insert(root->right_child, key, head);
}
return root;
}
我试过逐行调试,在searchPoint()中返回时可以清楚地看到一个节点值。然而,回到插入函数,变量 ptr 收到一个 NULL 指针。
我想不通,谁能帮帮我?
另外,这里的主要功能
int main()
{
int n, key;
Tree root = NULL;
Tree head = NULL;
printf("Input the number of integers:\n");
scanf("%d", &n);
printf("Input these integers:\n");
for (int i = 0; i < n; i++)
{
scanf("%d", &key);
root = insert(root, key, head);
if (i == 0) {
head = root;
}
}
print_level(head);
return 0;
}
解决方案
我通过返回 NULL 而不是节点本身解决了这个问题
Tree searchPoint(Tree node, int key)
{
if (!node || (key == node->data)) {
return NULL;
}
推荐阅读
- odata - 将行值绑定到 odata 模型 SAP UI5
- ios - AWS Mobile Hub 登录 - 如何在 iOS 上查找用户子
- python - Tensorflow 中的 Conv1D 混淆
- reactjs - 单击列表项时动画标记 - google-maps-react
- python - Tensorflow optimiser.compute_gradients 在第一步运行速度较慢
- javascript - PWA:如何以编程方式触发:“添加到主屏幕”?在 iOS Safari 上
- java - 为什么我的 textview deos 不显示,我可以在 XML 文件的预览中看到它,但在我的应用程序中看不到?(安卓)
- python - 每次运行代码 Python 时增加文件名
- java - RxJava:PublishSubject 同步动作
- python - 从文档术语矩阵计算前 n 个单词对共现