我正在尝试构建一个BST插入函数,但它不会返回我在main函数中插入的任何节点。
这是我的计划:
// BST structure
typedef struct bin_tree{
int data;
struct bin_tree *left;
struct bin_tree *right;
}bin_t;
// create a new tree
bin_t *newTree(int val){
bin_t *nnode = (bin_t *)malloc(sizeof(bin_t));
nnode->data = val;
nnode->left = NULL;
nnode->right = NULL;
return nnode;
}
// insertion function
void insert(bin_t *tree, int val){
if(tree == NULL){
tree = newTree(val);
}else{
if(val < (tree->data)){
insert(tree->left, val);
}else if(val > (tree->data)){
insert(tree->right, val);
}
}
}
void print_inorder(bin_t *tree)
{
if (tree)
{
print_inorder(tree->left);
printf("%d\n",tree->data);
print_inorder(tree->right);
}
}
int main(){
bin_t *root = NULL;
insert(root, 6);
insert(root, 45);
insert(root, 66);
insert(root, 3);
insert(root, 9);
insert(root, 33);
insert(root, 34);
printf("In Order Display: \n");
print_inorder(root);
}
如果我将树参数指向insert函数中的指针,它就可以工作:
void insert(bin_tree **tree, int val)
或者在insert函数中返回新节点(树)的地址。
我的问题是,是否有另一种插入节点的方法,它将从插入函数返回地址/值,然后我可以按顺序打印它?由于这个插入功能是hw要求,我无法改变它。如果我将根节点放在全局上(尝试过,但仍然无法正常工作,并且不知道为什么),这也很重要吗?
提前致谢!