gpt4 book ai didi

尝试打印二叉树根部的值时崩溃

转载 作者:行者123 更新时间:2023-11-30 14:58:07 25 4
gpt4 key购买 nike

到目前为止,程序已经足够简单:由包含整数值的节点以及指向节点左右分支的指针组成的二叉树。

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
int val;
struct node *left;
struct node *right;
} Node;

void insert(Node *root, int val);

int main(void){
Node *root = NULL;

insert(root, 5);
insert(root, 3);

printf("%d\n", root->val);


return 0;
}

void insert(Node *root, int val){
if(root == NULL){ // Create tree if root is empty
root = malloc(sizeof(struct node));
root->val = val;
root->left = NULL;
root->right = NULL;
} else if(val < root->val){ // branch to left of tree if new value is less than root value
if(root->left == NULL){
root->left = malloc(sizeof(struct node));
}

root->left->val = val;
} else if(val > root->val){ // branch to right of tree if new value is greater than root value
if(root->right == NULL){
root->right = malloc(sizeof(struct node));
}

root->right->val = val;
}
}

无论出于什么原因,插入都很顺利。我可以输入 5 和 3 (任意)。但我无法打印出 root->val 中应有的值“5”?程序完全崩溃了。我是不是忽略了什么?

最佳答案

问题出在insert的签名中:

void insert(Node *root, int val);

它不可能将 NULL 作为 root 参数,因为它无法传回函数内部发生的更改。 insert 内对 root 的任何修改都保留在 insert 本地,因为指针是按值传递的,即复制

对于一个好的签名,您有两种一般选择:

  • 使 insert 返回新的 root,即 Node *c 如果使用此方法,调用者将需要进行如下调用: root = insert(root, 5);
  • 传递Node**而不是Node*,即void insert(Node **root, int val);如果你使用这个方法,调用者需要进行如下调用:insert(&root, 5)。当然,insert 的实现也需要更改,因为额外的间接级别需要额外的取消引用。

关于尝试打印二叉树根部的值时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43461968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com