从函数返回时无法接收节点指针的值
Failed to receive a node pointer's value when returning it from a function
这就是我在二叉搜索树中的搜索功能。
将结果节点返回到我的插入函数时,插入函数中的变量无法接收从搜索函数返回的值。
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;
}
这就是我在二叉搜索树中的搜索功能。
将结果节点返回到我的插入函数时,插入函数中的变量无法接收从搜索函数返回的值。
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;
}