到目前为止,程序足够简单:由包含整数值的节点和指向节点左右分支的指针组成的二叉树。尝试在二叉树的根目录处打印值时发生崩溃
#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()后打印'root'的指针值 - 这不是你想象的那样.... – John3136
我似乎有愚蠢。 – Sato
你的一个愚蠢的方式是没有做研究。 SO上大约一半的链表/树帖子都有这个'只更新本地变量'的问题。 – ThingyWotsit